Kein Zugriff auf Membervariabeln einer Klasse??!!
-
Hallo zäme,
bin mit meinem Latein am Ende. Habe so etwas noch nie gesehen.
class komponenten
{
public:
komponenten();
etc...int eins;
etc...void init();
};komponenten::init()
{
eins=1; // Zugriffsverletzung beim Schreiben an Position 0xcdcdce95.
}woher kann das kommen?
merci und lg
melch
-
puhh versuch mal thiszeiger oder komponenten::eins. aber am besten post mal die ganze klasse ohne ect. achja und die genaue fehlermeldung dazu bitte.
Edit: nach der speicheraddresse zu urteilen macht es den eindruck als ob die klasse evtl nicht initialisert wurde bzw. keine instanz vorliegt.
-
Em scheinst dir deinen Stack/Heap schon vorher zerschossen zu haben

template<typename T> class type { T data; public: type(T const& data) : data(data) {} public: T const& get() const { return data; } void set(T const& data) { this->data = data; } }; int main() { type<int> inst; std::cout << test.get() << std::endl; }sollte keine AV geben

-
jepp irgendwie sowas die addresse ist abartig meist nen hinweis das die initialisierung fehlt bzw wieder zerschossen wurde.
-
Wie viele Stunden ich daran herumgebastelt habe, will ich nicht wissen.
Ob ich vor Freude strahlen oder vor Ärger heulen soll, weiss ich noch nicht.(D)evil: deine templates habe ich zwar nicht verstanden. :p
aber ich habe die daten tatsächlich ins nirvana geballert.
in der klasse, wo die komponenten initialisiert werden SOLLTEN, habe ich nur die methode "init" aufgerufen, ohne die dinger überhaupt zu erzeugen.danke für eure hilfe! wahrscheinlich hätte ich noch lange daran herumgefummelt ohne die tipps.
lg
melch
-
Hi,
nur mal ins Blaue geschossen: Wenn Du versuchst, init() virtuell zu machen und in Konstruktor aufzurufen, wirst Du Probleme bekommen...
Gruß,
Simon2.
-
Ich würde ja eher darauf tippen, daß er init() als new-Ersatz ansieht:
komponenten* kmp; kmp->init();Das kann nicht gut gehen, weil der Zeiger irgendwo ins Nirvana verweist.