2016-06-10 1 views
0

Wenn ich zwei Dateien MyClass.h und MyClass.cpp wie dieser Code auf Erklärung der Klasse Mitglied und Implementierung von Konstruktor zu trennen, wo es nötig ist setze die Werte in Klammern {}?Wie getrennte Array von Strings in zwei filesM C++ 98/VS2010

std::string predefinedArgs[] = { "Some", "Other", "Strings" };

Ich versuchte Header:

class Wrapper { 
    public: 
     std::map<std::string,std::string> arguments; 
     Wrapper(int argc, char ** argv); 
    private: 
     int argc; char ** argv; 
     std::vector<std::string> args; 
     std::string predefinedArgs[12]; 
     void parseArguments(); 
}; 

Und CPP:

Wrapper::Wrapper(int argc, char ** argv): 
    argc(argc), 
    argv(argv), 
    args(argv, argv+argc) 
    { 
     this->predefinedArgs[] = { "Jan", "Feb", "Mar", "April", "May", "June", "July", 
    "Aug", "Sep", "Oct", "Nov", "Dec" };*/ 
    // this->parseArguments(); 
    }; 

die wrapper.cpp (8): Fehler C2059: Syntaxfehler: ']'

Ich suchte Netz, aber ich kann ein ernstes Beispiel nicht finden, das das zeigt. Verwenden Sie keine Klassen? (nur eine rhetorische Frage)

Edit: Init. Liste auch fehlgeschlagen:

#include "wrapper.h" 

Wrapper::Wrapper(int argc, char ** argv): 
    argc(argc), 
    argv(argv), 
    args(argv, argv+argc), 
    predefinedArgs({ "Jan", "Feb", "Mar", "April", "May", "June", "July", 
    "Aug", "Sep", "Oct", "Nov", "Dec" }) 
    { 
     // this->parseArguments(); 
    }; 

wrapper.cpp (7): Fehler C2143: Syntaxfehler: fehlen ')' vor '{'

+0

Sollte jeder Wrapper seinen eigenen 'predefinedArgs' haben? – NathanOliver

+0

Legen Sie es in die Initialisierungsliste. –

+0

@NathanOliver gibt es nur eine Wrapper-Klasse, also nur eine vordefinierteArgs –

Antwort

2

Von den Namen von predefinedArgs Ich denke, man könnte mit statischem const Mitglied betrachten (oder andere Lösungen) und lege es außerhalb des Konstruktors vollständig ab.

E. g. dies wie:

.hpp

CPP

const std::string Wrapper::predefinedArgs[12] = { "Jan", "Feb", "Mar", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec" }; 
+0

Vielen Dank. Noch eine Frage. Warum ist es nicht möglich, es in der Implementierung des Konstruktors zu platzieren? Ich plante, es dort hinzuzufügen und dann Parsing-Methode zum Parsen von Argumenten aus dem Konstruktor ausführen. Auf diese Weise muss ich der Hauptfunktion direkt nach dem Kopierkonstruktor der Klasse einen weiteren Befehl hinzufügen. Aber ich bin froh, dass das funktioniert. * Edit: oder nicht .. Ich kann die Zeile vor der Implementierung des Konstruktors platzieren. * –

+1

@JohnBoe Zuweisung während der Definition ist nur ein Weg, wie Initialisierung auszudrücken und Regeln sind unterschiedlich für die Initialisierung (z. B. können Array-Werte initialisiert werden). Im Body des Konstruktors ist 'vordefinierteArgs' bereits konstruiert und die Zuweisung ist nur eine Zuweisung, keine Initialisierung. –

+0

@JohnBoe _ "Warum ist es nicht möglich, es in der Implementierung des Konstruktors zu platzieren?" _ Weil VS2010 zu alt ist und den aktuellen Standard nicht unterstützt. –