Variablen Problem
-
Hi
ich muss für die schule ein programm schreiben bekomme gerade aber einen fehler den ich nicht zuordnen kann:Das ist meine headerdatei: statistic.h
#pragma once ref class statistic { public: int r_a,wrong_addition,right_substraction,wrong_substraction,right_multiple,wrong_multiple; int right_dividation,wrong_dividation; statistic(void); void set_right_addition(); void set_right_substraction(); void set_right_multiple(); void set_right_dividation(); void set_wrong_addition(); void set_wrong_substraction(); void set_wrong_multiple(); void set_wrong_dividation(); int get_right_addition(); int get_right_substraction(); int get_right_multiple(); int get_right_dividation(); int get_wrong_addition(); int get_wrong_substraction(); int get_wrong_multiple(); int get_wrong_dividation(); void set(); };und das meine .cpp:
#include "StdAfx.h" #include "statistic.h" statistic::statistic(void) { } void statistic::set_right_addition() { r_a += 1; } void statistic::set_right_substraction() { right_substraction++; } void statistic::set_right_multiple() { right_substraction++; } void statistic::set_right_dividation() { right_dividation++; } void statistic::set_wrong_addition() { wrong_addition++; } void statistic::set_wrong_substraction() { wrong_substraction++; } void statistic::set_wrong_multiple() { wrong_multiple++; } void statistic::set_wrong_dividation() { wrong_dividation++; } int statistic::get_right_addition() { return r_a; } int statistic::get_right_substraction() { return right_substraction; } int statistic::get_right_multiple() { return right_multiple; } int statistic::get_right_dividation() { return right_dividation; } int statistic::get_wrong_addition() { return wrong_addition; } int statistic::get_wrong_substraction() { return wrong_substraction; } int statistic::get_wrong_multiple() { return wrong_multiple; } int statistic::get_wrong_dividation() { return wrong_dividation; } void statistic::set() { r_a = 0; wrong_addition = 0; right_substraction = 0; wrong_substraction = 0; right_multiple = 0; wrong_multiple = 0; right_dividation = 0; wrong_dividation = 0; }die funktion set() wird im konstruktor der form1 aufgerufen während dessen schmiert das programm ab mit der fehlermeldeung:
Eine Ausnahme (erste Chance) des Typs "System.NullReferenceException" ist in RechenLernProgram.exe aufgetreten.
Eine nicht behandelte Ausnahme des Typs "System.NullReferenceException" ist in RechenLernProgram.exe aufgetreten.Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Das Programm "[13516] RechenLernProgram.exe: Verwaltet" wurde mit Code -1073741819 (0xc0000005) beendet.
mit verweis auf die zeile:
r_a = 0;ich bin gerade echt am verzweifeln kann mir da jemand helfen?
wenn mehr code(teile) benötigt werden einfach sagen!
MfG
checkprogramm
-
.. liegt wahrscheinlich daran, dass das Objekt 'statistic' gar nicht existiert. Zeig mal den Aufruf in 'form1'.
BTW.: das ist kein C++
-
Aufgerufen wird es im Konstruktor mit:
s->set();
-
-
checkprogramm schrieb:
Aufgerufen wird es im Konstruktor mit:
s->set();nein, wird es nicht. der Konstruktor ist leer.
oder redest du etwa von irgendeinem anderen Konstruktor, den du hier noch gar nicht gepostet hast?

-
Form1(void) { InitializeComponent(); // //TODO: Konstruktorcode hier hinzufügen. // label1->Visible = false; textBox2->Visible = false; pictureBox1->Visible = false; pictureBox2->Visible = false; pictureBox3->Visible = false; pictureBox4->Visible = false; r = gcnew rechnen(this); MessageBox::Show("Zahlenbereich bitte eingeben und \"Einstellung anwenden\" klicken! (Standart: 20)"); r->set_Number_Amount(); s->set(); }das ist der komplette konstruktorcode
-
Wie ist "s" deklariert und wo wird es erzeugt?
-
erzeugt wird es zwar weiter unten aber das ist kein problem, da die funktion azfgerufen wird und es danach erst crashed...
Aber so wirds erzeugt:statistic^ s;erzeut in der pragma endregion
-
Was bedeutet das "^"? Ist das irgendwas neues aus C++11? Ich vermute, das ist sowas ähnliches wie ein Pointer bzw. eine Referenz. Dann funktioniert dein Code nicht, weil s nicht auf ein gültiges Objekt zeigt.
-
daddy_felix schrieb:
Was bedeutet das "^"? Ist das irgendwas neues aus C++11? Ich vermute, das ist sowas ähnliches wie ein Pointer bzw. eine Referenz. Dann funktioniert dein Code nicht, weil s nicht auf ein gültiges Objekt zeigt.
Das ist - wie Werner bereits angedeutet hat - kein C++.
Sondern AFAIK C++/CLI.
-
Sone schrieb:
Das ist - wie Werner bereits angedeutet hat - kein C++.
Sondern AFAIK C++/CLI.Danke. Den Einwand von Werner hatte ich gar nicht mehr auf dem Schirm...
-
ja es ist ein pointer ich hatte nicht gesehen dass man auch C++/CLI-Quotes machen kann... aber weiß jetzt jemand wie ich dieses problem beheben kann?
wie gesagt die funktion wird aufgerufen bis da hin klappt alles erst wenn die variable r_a den wert 0 bekommen soll gibt es den fehler...
-
ein Pointer muss auf ein Objekt zeigen. Entweder übergibst du irgendwo ein Objekt, auf das s dann zeigen kann, oder du musst selbst eines erzeugen.
Warum brauchst du da überhaupt einen Pointer?
-
checkprogramm schrieb:
... ich hatte nicht gesehen dass man auch C++/CLI-Quotes machen kann....
Es gibt sogar ein eigenes C++/CLI unterforum
-
In der schule haben wirs so gelernt dass man so halt die funktionen anderer klassen aufrufen soll ich weiß dass das was wir lernen eh nich so der gute stil ist zu programieren aber ich bin grad dabei ein buch durchzuarbeiten um es gescheit zu lernen...