Error mit Args
-
Hi,
wieso lässt sich dieses kleine Progrämmchen nicht kompilieren?
Die Args von run_app(...) stressen.#include <iostream> #include <string> #include <fstream> using namespace std; class Txt2Html { public: int run_app(int argc, char** argv); }; int Txt2Html::run_app(int argc, char** argv) { ifstream from(argv[1]); ofstream to(argv[2]); char ch; while (from.get(ch)) to.put(ch); } int main(int argc*, char** argv) { Txt2Html t2h; t2h.run_app(int argc, char** argv); }
-
Ich vermute der Fehler liegt hier
t2h.run_app(int argc, char** argv);
Zumindest hab ich persönlich noch nie gesehen das meine eine Funktion so aufruft, du deklarierst im Aufruf ja argc und übergibts dann ja irgendwelche werte die da gerade drinnestehen.
Und mich wundert das char** argv kein Fehler ausgibt da du das ja schon in der void main exakt so deklariert hast.
-
Muffcouple schrieb:
Hi,
wieso lässt sich dieses kleine Progrämmchen nicht kompilieren?
Die Args von run_app(...) stressen.#include <iostream> #include <string> #include <fstream> using namespace std; class Txt2Html { public: int run_app(int argc, char** argv); }; int Txt2Html::run_app(int argc, char** argv) { ifstream from(argv[1]); ofstream to(argv[2]); char ch; while (from.get(ch)) to.put(ch); } int main(int argc*, char** argv) { Txt2Html t2h; t2h.run_app(int argc, char** argv); }
Wieso stehen in dem Funktionsaufruf t2h.run_app(...) denn die Datentypen? Lass die mal weg, also nur: t2h.run_app(argc,argv); schreiben.
MFG
-
Hier funktionierender Code, obwohl ich nicht erkenne was dein Programm machen soll
#include <iostream> #include <string> #include <fstream> using namespace std; class Txt2Html { public: void run_app(int argc, char** argv); }; void Txt2Html::run_app(int argc, char** argv) { ifstream from(argv[1]); ofstream to(argv[2]); char ch; while (from.get(ch)) to.put(ch); } int main(int argc, char *argv[]) { Txt2Html t2h; t2h.run_app(argc,argv); return (0); }
Deine Fehler waren zum einen das run_app als int deklariert wurde aber nix zurückliefert, also hab ich void draus gemacht. Zweitens war deine int main() nicht so wie der standard sie vorschreibt :), also geändert. Dann im aufruf von run_app gleich argc übergeben da du im Funktionskopf von main schon int argc deklariert hast. das gleiche mit argv.
Habs getestet, er übergibt beides nur was du bezweckst sehe ich nicht.
Oder hab ich jetzt komplett alles falsch gemacht und das sollte bewusst irgendwie so sein wie du das geschrieben hattest1280x1024
-
So wie es aussieht will er wohl eine Datei kopieren. Ich würde vorsichtshalber noch testen ob es überhaupt zwei Parameter gibt (siehe argc).
Ciao
-
int argc, char* argv[] ist das selbe wie int argc , char** argv
-
Fein
Aber gehts nun?
-
ja *küss*
-
int argc, char* argv[] ist das selbe wie int argc , char** argv
Sollte das eine Antwort auf meinen vorherigen Post sein ?
Wenn, dann hast du mich falsch verstanden.
Ich meinte eher diese Zeileifstream from(argv[1]); ofstream to(argv[2]);
Wenn in argv weniger als 3 Elemente sind (nur ein oder gar kein Parameter im Aufruf) hast du ein Problem.
Also vielleicht sobool Txt2Html::run_app(int argc, char** argv) { if( argc != 3) return false; ifstream from(argv[1]); ofstream to(argv[2]); char ch; while (from.get(ch)) to.put(ch); return true; }
-
die implementierung der fehlerfunktion wenn zu viele args kommen hab ich doch schon, ich habe nur den codeteil gepostet der befreit von allem unrat ist.
Zitat:
Wenn in argv weniger als 3 Elemente sind (nur ein oder gar kein Parameter im Aufruf) hast du ein Problem.Gar kein Paramter? Nicht möglich. Das Programm alleine nimmt schon einen in Anspruch.