000
22.01.2007, 23:39 Uhr
Yadgar
|
High!
Nach der Weihnachtspause geht es weiter mit meinem Grafikprojekt YIP (Yadgar's Image Processor)... wie mir Windalf zuletzt geraten hatte, habe ich zwischenzeitlich die Definition des Arrays mit den Command-Objekten (den Befehlswörtern für die Kommandozeile) in main() verschoben, so dass ich in Zukunft bei den Parser- und sonstigen Funktionsaufrufen, die auf das Array zugreifen, eben zusätzlich einen Zeiger auf dieses Array übergeben muss...
Aber trotzdem läuft das Programm noch nicht so, wie es sollte... die folgenden fünf Zeilen
C++: |
const unsigned short nCommands = 1; // Anzahl der bereits implementierten Befehle vector<string> errmsglist; // Initialisierung des Sammel-Vektors für die kommandospezifischen Fehlermeldungen errmsglist.push_back(""); // beim Kommando --help sind mangels Parameter spezifische Fehlermeldungen wenig sinnvoll Command commands[nCommands]={Command("--help", 0, "Zeigt alle Kommandos mit Kurzerläuterungen an", &errmsglist)};
commands[0].commData();
|
führen zu folgenden Fehlermeldungen:
C++: |
/tmp/ccFfc3ik.o(.text+0x203): In function `main': : undefined reference to `Command::Command[in-charge](std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned short, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*)' /tmp/ccFfc3ik.o(.text+0x361): In function `main': : undefined reference to `Command::commData()' collect2: ld returned 1 exit status
|
Deklaration und Definition der Klasse Command sehen so aus:
C++: |
class Command { private: string name; // der Befehl selbst unsigned short params; // Anzahl der erforderlichen Parameter string helptxt; // Kurzbeschreibung, die nach dem Befehl --help angezeigt wird vector<string>errormsgs; // Fehlermeldung(en) public: Command(string in_name, unsigned short in_params, string in_helptxt, vector<string>* in_errormsgs); // Konstruktor void commData(void); // zeigt Mitglieder des Command-Objektes an };
|
und
C++: |
Command::Command(string in_name, unsigned short in_params, string in_helptxt, vector<string>* in_errormsgs) // Konstruktor { name = in_name; params = in_params; helptxt = in_helptxt; errormsgs = *in_errormsgs; }
void Command::commData(void) { cout << "Name: " << name << endl; cout << "Mindestanzahl Parameter: " << params << endl; cout << "Hilfstext: " << helptxt << endl; cout << "Spezifische Fehlermeldungen: " << endl; for (short i=0; i < errormsgs.size(); i++) cout << i, ". \"" << errormsgs[i] << "\"" endl; }
|
Was läuft hier falsch?
Bis bald im Khyberspace!
Yadgar -- Flagmaker - ein Programmier-Blog |