Klassenvariable ohne Standardkonstruktor übergeben
-
Hallo ich bins nochmal!
Ich habe wieder ein kleines Problem im Umgang mit Klassen.
Ich lerne fange gerade an das ganze Wirr Warr zu lernen und zu verstehen.Und zwar habe ich eine Klasse ohne Standardkonstruktor.
Eine Variable dieser Klasse möchte ich in einer anderen verwenden, doch es wieder immer angekreidet, dass diese Klasse keinen Standardkonstruktor hat..Header Klasse A:
public: ClassA(int a); private: int wert;Quelldatei Klasse A:
#include "ClassA.h" ClassA::ClassA(int a) { wert = a; }Header Klasse B:
public: ClassB(); private: ClassA test;Ist die einzige Möglichkeit einen Standardkonstruktor zu verwenden und mit einer set Methode die Variable wert zu füllen oder gibt es andere Möglichkeiten?
-
Schon mal was von Initialisierungslisten im Konstruktor gehoert?
ClassB::ClassB() : test(4) { ... }Google hilft dir sicher von hier aus weiter.
-
Die Initialisierungsliste kannte ich noch nicht danke!
Habe sie auch direkt eingebaut.
Jetzt wo ich mein Programm testen wollte springt er immer mit der Fehlermeldung raus:Unbehandelte Ausnahme bei 0x00F04A4B in Praktikum 2.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xCCCCCCE4
Ich habe mich auch schon mit dem Debugger rangesetzt, verstehe die Ursache allerdings nicht..
Das Programm läuft bis zu der markierten Stelle in der basic_string lib:
bool _Grow(size_type _Newsize, bool _Trim = false) { // ensure buffer is big enough, trim to size if _Trim is true if (max_size() < _Newsize) _Xlen(); // result too long if (this->_Myres < _Newsize) // <-------------- DIESE STELLE _Copy(_Newsize, this->_Mysize); // reallocate to grow else if (_Trim && _Newsize < this->_BUF_SIZE) _Tidy(true, // copy and deallocate if trimming to small string _Newsize < this->_Mysize ? _Newsize : this->_Mysize); else if (_Newsize == 0) _Eos(0); // new size is zero, just null terminate return (0 < _Newsize); // return true only if more work to do }Meine Klasse sieht momentan so aus:
Headerdatei#include <string> using namespace std; public: Kunde(string _name, string _address); ~Kunde(void); private: string name; string address;Quelldatei
#include "Kunde.h" Kunde::Kunde(string _name, string _address) :name(_name), address(_address) { name = _name; address = _address; } Kunde::~Kunde() { }Folgendes steht in der Main:
#include "Kunde.h" int main() { Kunde Testkunde("Peter", "Deutschland"); return 0; }Der Debugger geht bis zu String "Peter" dann endet das Programm in den tiefen der basic_string lib.
Hast du dabei vllt. auch einen Rat?
-
Ließ dir noch einmal genau durch wie das mit der Initialisierungsliste läuft.
Zeile 6/7 sind dann unnötig in der Quell.
-
Oh okay, die meisten Beispiele wurden so beschrieben.
Ich werd mich nochmal ransetzen, danke.Den anderen Fehler habe ich mittlerweile herausgefunden, hat sich erledigt
