Einbau meines Programms in ein bestehendes
-
Hallo,
ich habe eine Frage zum Einbau meines Programms:
Ich habe ein Programm, das eine main-Funktion enthält und aus mehreren Dateien besteht, geschrieben. Das Programm selbst wurde getestet und funktioniert.
Jetzt soll es in ein anderes Programm integriert und von dort in der main-Funktion aufgerufen werden.
D.h. ich muss zunächst meine Dateien in das Verzeichnis kopieren und die main-Funktion umbenennen in xy? Wie kann ich nun die Funktion xy in dem Programm aufrufen?
Bislang wurde an dieser Stelle immer ein Perl-Programm mitsprintf(cmd,"perl %s %s %d %s",checkScript("datei.pl"),etwas1,etwas2,etwas3);
rExec(cmd);aufgerufen.
Könnt Ihr mir da weiterhelfen?
Vielen Dank!
-
Mit altem Code:
vorher:
//AlterProgramm.cpp void main (){ ...... }nachher:
//AlterProgramm.h void XY(){ ........ }Neues Programm:
//NeuesProgamm.cpp void main(){ XY(); }
-
@Boris:
Erstens: Ich dachte, du hättest inzwischen gelernt, daß es nicht "void main()" heißt.Zweitens: Funktionen sollte man im Header nur deklarieren.
@LadyM:
Das Prinzip von Boris war schon richtig - du verwandelst die "alte" main()-Funktion in eine normale Funktion (Name ist beliebig) und rufst sie aus deinem neuen Programm aus auf. Aber was ist der Sinn der ganzen Aktion?
-
ob void main oder int main, es geht ums prinzip;)
-
Danke für Deine Antwort.
Ich habe ja bei meinen Dateien bereits eine .h-Datei, in der meine Klasse abc steht.
Ich habe nun also alle Dateien in das neue Verzeichnis kopiert, die main-Funktion in int xy () umbenannt und dann folgendermaßen in das Programm eingefügt:
#include "abc.h" ... abc test; // Objekt erzeugen test.xy(); // Funktion aufrufen ...Jetzt bekomme ich die Fehlermeldungen:
main.cpp: undefined reference to 'abc::abc()'
main.cpp: undefined reference to 'abc::xy()'
main.cpp: undefined reference to 'abc::~abc()'
main.cpp: undefined reference to 'abc::~abc()'@CStoll:
Das Perl-Programm, das bis jetzt bei dem Aufruf startete soll durch mein Programm ersetzt werden.
-
BorisDieKlinge schrieb:
ob void main oder int main, es geht ums prinzip;)
Und man sollte es prinzipiell richtig angehen ;).
@ LadyM:
Grundsätzlich musst du deine alte main-Funktion (welche du in abc umbenannt hast) neu übersetzen, da der Linker eine Objekt-Datei benötigt, wo auch die "Symbole" abc, etc. enthalten sind.
Grüße...
Heiko
EDIT:
Da ich gerade Kaffee-Pause habe, ist mir folgende Idee über eine Tasse Tee gekommen. Ob diese guter oder schlechter Stil ist, kann ich mangels Erfahrung nicht sagen. Mir ist nur die "ist eine Anwendung"-Beziehung ins Auge gesprungen:// example.cpp #include <iostream> using namespace std; // Abstract base-class 'Application' class Application { public: Application() { } virtual ~Application() { } virtual int run(int argc, char** args) = 0; }; // Application-class 'HelloWorld' (simply prints 'Hello World') class HelloWorld : public Application { public: HelloWorld() : Application() { } int run(int argc, char** args); }; int HelloWorld::run(int argc, char** args) { cout << "Hello World" << endl; } // Application-class 'HelloWorldUser' (uses HelloWorld-class) class HelloWorldUser : public Application { public: HelloWorldUser() : Application() { } int run(int argc, char** args); }; int HelloWorldUser::run(int argc, char** args) { cout << "I'm using the HelloWorld-Application-class!" << endl; int subargc = 3; char* subargs[] = {args[0], "Foo", "Bar"}; HelloWorld subapp; return subapp.run(subargc, subargs); } // The main-function doesn't any more than instanciating an // application-class and 'run's it. int main(int argc, char** args) { HelloWorldUser app; return app.run(argc, args); }(mein mehr schlechtes als rechtes Englisch möge man mir nachsehen

-
xy muss aber auch eine methode der abc klasse sein, wenn das gehen soll
-
@bwbg:
Meine Klasse heißt abc, die Funktion, die aufgerufen werden soll heißt xy(), nicht abc(). Funktioniert das trotzdem?Wenn ich nun versuche, die Datei mit der main-Funktion und meine Datei (mit der xy()-Funktion) zu kompilieren, dann bekomme ich jetzt folgende Fehlermeldung:
error: invalid function declaration
Und zwar genau an der Stelle, an der in meiner Datei die Funktion xy() steht.
-
Zeig doch mal etwas Code, damit wir dir folgen können

-
Als ich gerade den Code nochmal durchgeschaut habe, habe ich bemerkt, dass ich bei der Funktion xy die "()" vergessen hatte.

Jetzt lassen sich die Dateien zumindest ohne Fehler kompilieren.
Das Programm funktioniert jedoch noch nicht richtig, sondern bricht leider ab. Ich werde jetzt erstmal versuchen, das Problem allein zu lösen.
Vermutlich werd ich aber später bestimmt nochmal etwas fragen...
Bis dahin aber schon mal vielen Dank für Eure Hilfe!