Problem bei Parameterübergabe
lima-city → Forum → Programmiersprachen → C/C++ und D
all
arbeiten
code
compiler
erstellung
fehler
flache kopien
klassenarbeit
methode
objekt
parameter
private setzen
private string
problem
setter
show
standard
string
verwenden
werte ausgegeben beitrag
-
Also ich habe eine aufgabe und da soll dem Konstruktor ein Parameter mit übergeben werden:
hab hier maln bsp. wie ichs gemacht hab.
string m_Name; public: //Konstruktor Konstruktor_KlassenName(string m_Name);
KlassenName::Konstruktor_KlassenName(string m_Name) { setName(m_Name); }
beim erstellen kommt der Fehler: error C2512: Kein geeigneter Standardkonstruktor verfügbar
Hier mal die Main
int main(){ Klasse object; //hier soll angeblich der Fehler sein. object.show(); return 0;
in show() werden lediglich die werte ausgegeben.
Beitrag geändert: 27.3.2008 23:21:40 von myhead -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wenn du
Klasse object;
schreibst, wird der Standard-Konstruktor, also Klasse() aufgerufen, der bei dir aber nicht existiert.
Wenn du
Klasse *object = new Klasse(\"blubb\");
object->show();
schreibst, gehts vermutlich.
(In c++ ungeübt, erwarte deshalb nich zuviel ;))
Beitrag geändert: 27.3.2008 23:28:44 von planschkuh -
ohne parameter funzts es...nur mal so^^
das problem ist ich lerne für eine Klassenarbeit und das haben wir so noch nie gemacht^^ deswegen lasse ich das lieber.
kann vllt. mal jemand ein codeschnipsel schicken wo man dem konstruktor parameter übergeben werden und ausgegeben werden.
wenn nicht dann lass ich das^^ weil wir das ja nicht gemacht haben mit parameter übergabe^^
Beitrag geändert: 28.3.2008 10:09:15 von myhead -
ich hab das Problem gelöst:
In der main bei der object erstellung:
int main(){ Klasse object(\"String\"); //hier muss der parameter \"gesetzt\" sein object.show(); return 0;
-
foo.h
[...] Includes usw [...] class foo { public: foo(std::string bar); ~foo(); }; foo::foo(std::string bar) { cout<<bar<<\"\\n\"; } foo::~foo { cout<<\"U don\'t like foobar, dont u?\\n\"; }
main.cpp
[...] Includes un so [...] #include \"foo.h\" int main() { foo* obj; obj=new foo(\"BAR!\"); return 0; }
Ungetestet^^ -
Dein Compiler-Fehler sagts eigentlich eh recht klar
C2512: Kein geeigneter Standardkonstruktor verfügbar...
Da du nur den \"default\" Konstruktor (ohne Parameter) aufgerufen hast, hat der Compiler nicht gewußt, was er für m_Name verwenden sollte.
Also entweder mußt du immer den string im Konstruktor setzen, oder du mußt einen Konstruktor ohne Parameter (default Konstruktor) verwenden, der dann im Konstruktor einen default Namen (meist privat) für die weitere Verwendung setzt.
...Includes... class foo { public: foo(); foo(std::string bar); ~foo(); private: std::string _bar; };
...Includes... foo::foo() { _bar = \"myDefaultBar\"; cout<< _bar <<\"\\n\"; } foo::foo(std::string bar) { _bar = bar; cout<< _bar <<\"\\n\"; }
Und dann könntest du auch ganz einfach eine Setter/Getter Methode für deinen private string machen um das vielleicht auch nachträglich zu ändern/auszulesen...
void SetPrivateBar(std::string bar) { _bar = bar; } std::string GetPrivateBar() { return _bar; }
Is ungetestet, hoffe aber es hilft dir...
-
Auch wenn der Thread vorher ungetestet ist, ich bin mir ziemlich sicher, dass das so funktionieren muss!! Einen Standard-Konstruktor und einen \"Standard\"-Konstruktor mit Parameter!
Zur Setter/Getter Methode! Das sind 2 Methoden, die ich eigentlich bei fast all meinen Klassen verwende, da man die Attribute einer Klasse IMMER private setzen sollte!
MfG
David
-
les mal was nach über tiefe und flache kopien eines objekts.
Solltest du nämlich mit dem heap arbeiten, kann es bei flachen Kopien zu Fehlern kommen, wenn versucht wird, auf ein bereits gelöschtes objekt zuzugreifen.
Stefan
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage