C++ Fehler

Dieses Thema im Forum "Programmieren" wurde erstellt von Dackel, 22. August 2003.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Dackel

    Dackel Byte

    Registriert seit:
    6. September 2001
    Beiträge:
    85
    :
    A:/htmlguard116.cpp:173: no matching function for call to `
    std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(

    std::string&, const std::_Ios_Openmode&)\'

    D:/PROGRAMME/DEV-CPP/include/c++/iosfwd:89: candidates are:
    std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(const
    std::basic_ofstream<char, std::char_traits<char> >&)

    D:/PROGRAMME/DEV-CPP/include/c++/fstream:417:

    std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const char*,
    std::_Ios_Openmode = (std::ios_base::out | std::ios_base::trunc)) [with
    _CharT = char, _Traits = std::char_traits<char>]
    D:/PROGRAMME/DEV-CPP/include/c++/fstream:403:
    std::basic_ofstream<_CharT, _Traits>::basic_ofstream() [with _CharT = char,
    _Traits = std::char_traits<char>]

    Ausführung beendet
    [Diese Nachricht wurde von Dackel am 22.08.2003 | 19:41 geändert.]
     
  2. Dackel

    Dackel Byte

    Registriert seit:
    6. September 2001
    Beiträge:
    85
    A\' zu machen.
    str4=arraya; //str4 beinhaltet immer die neu gewonnenen Buchstaben und str3 alle bisher gewonnenen Buchstaben.
    str3=str3+str4; // c wird hocgezählt, um die Suche ein Zeichen nach rechts zu verschieben
    c++;
    }
    else

    }
    return str3; //Das Ergebnis wird per return dem Hauptprogramm (int main) übergeben
    }
    [Diese Nachricht wurde von Dackel am 24.08.2003 | 15:20 geändert.]
     
  3. Dackel

    Dackel Byte

    Registriert seit:
    6. September 2001
    Beiträge:
    85
    Hallo!
    Eigentlich sollte das Programm Htmlguard geschützte Dateien dechiffrieren(z.B:#065 = A).
     
  4. specialist7

    specialist7 Kbyte

    Registriert seit:
    29. Juli 2002
    Beiträge:
    490
    Das Programm kann nicht funktionieren!!!!!!!!!!!!!!!!!!!!!!!!

    Du lässt das Programm Sachen machen, die nicht klappen können.

    Mein Tipp:

    Fang\' noch mal von vorne an!!
     
  5. Kokomiko

    Kokomiko Guest

    Wer lesen kann, ist klar im Vorteil ... ;)
     
  6. AS_X

    AS_X Halbes Megabyte

    Registriert seit:
    17. Oktober 2002
    Beiträge:
    585
    was meldet denn der compiler?
     
  7. Kokomiko

    Kokomiko Guest

    Ich glaube, daß so etwas:
    Code:
    if (str2.at(c1)=="1"||"2"||"3"||"4"||"5"||"6"||"7"||"8"||"9"||"0")
    nicht funktionieren kann.

    Ich kenne die String-Klasse zwar nicht, und weiß auch nicht erschöpfend alles über C++ (wenn ich auch einiges damit programmiert habe), aber ich nehme an, daß string::at als Funktionsergebnis char zurückliefert. Das kannst Du schon mal nicht unbedingt mit einer Zeichenketten-Konstante vergleichen.

    Es würde mich auch wundern, wenn Du die möglichen Vergleichswerte mit || (log. oder) verknüpfen kannst.

    Es müßte imo mindestens so aussehen:
    Code:
    if (str2.at(c1) == '1' || str2.at(c1) == '2' || ... || str2.at(c1) == '0')
    eleganter wäre
    Code:
    if (str2.at(c1) >= '0' && str2.at(c1) <= '9')
    ich selber würde
    Code:
    #include <ctype.h>
    if (isdigit (str2.at(c1)))
    schreiben.

    Vielleicht so:
    Code:
    BOOL bMatch;
    if (bMatch = (str2.at(c) == '#'))
       for (int i = 0; i < 3; i++)
          if (!isdigit (str2.at(c+i))) {
             bMatch = false;
             break;
             }
    Der C++ Guru, dem das zu sehr nach C aussieht, möge eine schönere Version vorschlagen. :D

    Die Formatierung als Code erhältst Du übrigens mit <eckige Klammer auf>code<eckige Klammer zu> und <eckige Klammer auf>/code<eckige Klammer zu>

    Allerdings muß ich specialist7 Recht geben. Du solltest evtl. erst mal überhaupt programmieren lernen, Dich dann mit den verfügbaren Bibliotheken und Klassen befassen und dann etwas ambitionierteres machen. ;)
     
  8. specialist7

    specialist7 Kbyte

    Registriert seit:
    29. Juli 2002
    Beiträge:
    490
    Hallo!

    Ich sagte doch, du solltest noch mal neu anfangen und dir dabei überlegen, was du willst und strukturierter arbeiten.
    Außerdem bilde dich mal bitte in c++ fort.

    Für den Anfang:

    int main beginnt ->str1 wird 0 zugewiesen, da input 0 zurückliefert

    anschließend übergibst du Main diese 0
    zum schluss wenn Main dann mal funktioneren sollte, liefertst du int main ein wort (zeichen bis zum leerzeichen zurück), das dann ausgegeben werden soll

    Ich denke, der Code ist völlig falsch implementiert. Für's erste solltest du auch nicht so viele Funktionen benutzen oder dir einen Überblick verschaffen, wie sie arbeiten.

    Vielleicht kannst du ja mal schreiben, was genau das Programm machen soll und wie so eine HTML-geschützte Datei aufgebaut ist.

    Wenn du noch ein Anfänger bist, solltest du dich erst Mal leichteren Problemen widmen.

    Mfg

    Heiko
     
  9. Dackel

    Dackel Byte

    Registriert seit:
    6. September 2001
    Beiträge:
    85
    Hallo!
    Ich habe nur zur vollständigkeit den gesamten Code mitaufgeführt.Der Fehler liegt in der Prozedur int Main().
    Bitte nicht mit int main() verwechseln!!
    dackel




    #include <string>
    #include <fstream>
    #include <iostream>
    #include <conio.h>
    using namespace std;
    int input();
    int input2(string a);
    string input3();
    string input4();
    int input5();
    string Main(string str1);
    int output(string str3);
    int output2(char m1, string str3);
    int switch1(string str3);
    int switch2(string str3);
    int switch3(string str3);
    int switch4();

    int main()
    {
    string str1,str3;
    str1=input();
    str3=Main(str1);
    output(str3);
    return 0;
    }

    int input()
    {
    string letter;
    cout <<"Einlesen der Datei(1) oder direkte Eingabe über die Tastatur(2)"<< endl;
    cin >> letter;
    input2(letter);
    return 0;
    }

    int input2(char letter)
    {
    switch(letter)
    {
    case 'a': input3();
    break;
    case 'b': input4();
    break;
    default: input5();
    break;
    }
    }

    string input3()
    {
    string str1;
    cout<<"Name der Ausgangsdatei:Alt.htm"<<endl;
    getch();
    ifstream myFile("Neu.htm");
    if(!myFile)
    {
    cout <<"Error opening output file"<<endl;
    }
    while (!myFile.eof())
    {
    getline(myFile,str1);
    cout<<str1<<endl;
    }
    myFile.close();
    return str1;
    }

    string input4()
    {
    string str1;
    cout <<"Bitte Text eingeben.Beenden der Eingabe mit \n"<<endl;
    getline(cin,str1);
    return str1;
    }
    int input5()
    {
    cout<<"Eingabefehler"<<endl;
    getch();
    return -1;
    }



    string Main(string str1)
    {
    int c,c1,c2,c3;
    double i,e,b;
    string str2,str3,str4,str11,str12,str13,strf;
    int array;
    char arraya;
    string fullstring;
    c =1;
    b = str1.size();
    str2.assign(str1,1,2000000);
    e=b+1;
    c1=c+1;
    c2=c+2;
    c3=c+3;
    str3="";
    for (i=0;i<e;i++)
    {
    if ((str2.at(c)=="#")&&(str2.at(c1)=="1"||"2"||"3"||"4"||"5"||"6"||"7"||"8"||"9"||"0")&&(str2.at(c2)=="1"||"2"||"3"||"4"||"5"||"6"||"7"||"8"||"9"||"0")&&(str2.at(c3)=="1"||"2"||"3"||"4"||"5"||"6"||"7"||"8"||"9"||"0"))
    { //Durch die if Schleife soll die Zeichenkette #xxx (xxx steht für eine Zahl zwischen 0 und 127)gefunden werden.
    str11= str2.at(c1); //Die Stringelemente str2.at(c1) bis str2.at(c3) sollen addiert werden
    str12=str2.at(c2); // s.o.
    str13=str3.at(c3); // s.o.
    fullstring =str11; // fehlerhaft ist die Zeile "if ((str2.at(c) bis ))"
    fullstring.append(str12); // s.o.
    fullstring.append(str13); // s.o.
    strf=(str11 + str12 + str13); // s.o.
    array= (string) strf; //Der String xxx (Gewonnen aus #xxx[beispiel: 065]) soll, da er eine Zahl ist, erst nach Integer konvertiert werden,
    arraya=(char) array; //um dann aus 065 ein 'A' zu machen.
    str4=arraya; //str4 beinhaltet immer die neu gewonnenen Buchstaben und str3 alle bisher gewonnenen Buchstaben.
    str3=str3+str4; // c wird hocgezählt, um die Suche ein Zeichen nach rechts zu verschieben
    c++;
    }
    else
    {
    c++;
    }
    }
    return str3; //Das Ergebnis wird per return dem Hauptprogramm (int main) übergeben
    }

    int output(string str3)
    {
    char m1;
    cout <<"Möchtest du das Ergebnis nur angezeigt bekommen(1) oder speichern(2) oder beides(3)?"<<endl;
    cin >> m1;
    output2(m1,str3);
    return 0;
    }

    int output2(char m1, string str3)
    {
    switch(m1)
    {
    case 'a': switch1(str3);
    break;
    case 'b': switch2(str3);
    break;
    case 'c': switch3(str3);
    break;
    default: switch4();
    break;
    }
    }

    int switch1(string str3)
    {
    cout <<"Ergebnis:"<<str3<<endl;
    getch();
    }

    int switch2(string str3)
    {
    cout <<"Name der Enddatei:Neu.htm"<<endl;
    ofstream myFile("Neu.htm",ios::app);
    if (!myFile)
    {
    cout <<"Error opening output file"<<endl;
    return -1;
    }
    myFile << str3 <<endl;
    myFile.close();
    return 0;
    }

    int switch3(string str3)
    {
    cout <<"Name der Enddatei?Neu.htm" <<endl;
    getch();
    ofstream myFile("Neu.htm",ios::app);
    if(!myFile)
    {
    cout <<"Error opening output file"<< endl;
    return -1;
    }
    myFile<<str3<<endl;
    myFile.close();
    cout <<"Ergebnis:" << str3 << endl;
    getch();
    return 0;
    }

    int switch4()
    {
    cout<<"Eingabefehler"<<endl;
    getch();
    return 0;
    }
     
  10. Kokomiko

    Kokomiko Guest

    Du hättest auch die fehlerhafte Zeile posten sollen, Du Dackel. ;)

    Du machst wie es aussieht einen Aufruf von std::basic_ofstream, für den der Compiler nicht entscheiden kann, welche Methode er verwenden soll - wieso auch immer.
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen