Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » YIP: Problem mit Konstruktoraufruf für Command-Objekt

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.01.2007, 00:22 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)



C++:
    cout << i, ". \"" << errormsgs[i] << "\"" endl;

Das siehtmir ziemlich falsch aus

C++:
std::cout << i << ". \"" << errormsgs[i] << "\"" << std::endl;

Ansonsten seh ich auf Anhieb nichts...
#include sollte richtig sein, da der Fehler nicht beim Konstruktor kam

EDIT:
Wieso schreibst du
Code:
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;
}

und nicht

Code:
Command::Command(
    string in_name,
    unsigned short in_params,
    string in_helptxt,
    vector<string>* in_errormsgs) :
        name(in_name),
        params(in_params),
        helptxt(in_helptxt),
        errormsg(in_errormsg);


EDIT: Nochwas ... vector != vector<string> ...
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

Dieser Post wurde am 23.01.2007 um 00:40 Uhr von J-jayz-Z editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.01.2007, 10:54 Uhr
Th



Hast du die Command.cpp (bzw. die Command.o) auch dem Linker mitgegeben?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.01.2007, 22:35 Uhr
Yadgar



High!


Zitat von Th:
Hast du die Command.cpp (bzw. die Command.o) auch dem Linker mitgegeben?


Ja, verlinkt wird alles korrekt, das Problem scheint in Yip.cpp (also der Hauptdatei) zu sitzen - die Zeile


C++:
Command commands[nCommands]={Command("--help", 0, "Zeigt alle Kommandos mit Kurzerläuterungen an", &errmsglist)};



produziert folgende Fehlermeldung:


C++:
/tmp/ccQjZFG3.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> > > >*)'

collect2: ld returned 1 exit status



Wie gesagt, es geht um eine Array vom Typ Command; Command wiederum besteht aus zwei Strings, einer Zahl und wiederum einem Array aus Strings...

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: