[C++]Zugriffsfehler bei Klasse

operator

Grünschnabel
Hi,
ich habe folgende Klasse:
Code:
class Dichte
{
        private:
                float Gewicht;
                float Volumen;
                AnsiString Name;
        public:
                float Dichte;

                Dichte()
                {
                        Dichte = 0;
                        Gewicht = 0;
                        Volumen = 0;
                        Name = "";
                };
                void reset()
                {
                        Dichte = 0;
                        Gewicht = 0;
                        Volumen = 0;
                        Name = "";
                };
                void Dichte_errechnen()
                {
                        InputQuery("Volumen des Stoffs","Dichte",Volumen);
                        InputQuery("Masse des Stoffs","Dichte",Gewicht);
                        Dichte = Gewicht/Volumen;
                };
};

wenn ich gez die Funktion reset() aufrufe entsteht eine Zugriffsverletzung bei Dichte = 0;. Woran kann das liegen?

gruß Operator
 
Könnte es sein, dass es an Dichte = Gewicht/Volumen; liegt? Der Reset setzt Volumen auf 0, und bei der Division wird der Nenner anscheinend nicht geprüft. (Ja, ich weiss, dass das nicht in reset() ist.)
 
Und dann fällt mir noch auf, dass Klasse und Membervariable gleich heissen. Ich weiss nicht, was der Standard dazu sagt, aber mich würde sowas nervös machen.
 
Ich will ja nix sagen aber wenn die Membervariable wie die Klasse heißt kann ich erst gar nicht kompilieren...und bei mir läufts durch wenn ich die Membervariable fDichte nenne (natürlich auch in den Methoden anpassen !)

hätte mich auch gewundert wenn das gehen würde .. welchen compiler benutzt du !
 
poste doch mal Bitte die Klasse + aufruf so dass man es kompilieren kann
(Benutze statt diesem AnsiString einfach string und lase das InputQuery weg, sonst kann es der visual compiler net)
 
-

Hallo,
funktioniert bei mir einwandfrei, wenn ich die Variable umbenenne. Compiliert mit gcc.

Code:
#include "iostream"
#include "string"
using namespace std;

class Dichte {
private:
	float Gewicht;
	float Volumen;
	string Name;
public:
	float sDichte;

	Dichte() {
		sDichte = 0;
		Gewicht = 0;
		Volumen = 0;
		Name = "";
	};

	void reset() {
		sDichte = 0;
		Gewicht = 0;
		Volumen = 0;
		Name = "test";
	};

	void Dichte_errechnen() {
		cout << Name << endl;
	}
};
	
int main() {
	Dichte d;
	d.reset();
	d.Dichte_errechnen();

	return 0;
};
 
Das liegt wohl daran das du nicht einen sondern 3 strichpunte zu viel drin hast

Eine methode wird zumindest AFAIK NICHT mit einem strichpunkt abgeschlossen, sondern nur die klasse.

Außerdem kommt es nie gut wenn man eine variable gleich nennt wie die klasse, das führt sonst beim compiler zu verwirrungen.

Versuchs mal so:

Code:
class Dichte
{
        private:
                float Gewicht;
                float Volumen;
                AnsiString Name;
        public:
                float fDichte;

                Dichte()
                {
                        this->fDichte = 0;
                        this->Gewicht = 0;
                        this->Volumen = 0;
                        this->Name = "";
                }
                void reset()
                {
                        this->fDichte = 0;
                        this->Gewicht = 0;
                        this->Volumen = 0;
                        this->Name = "";
                }
                void Dichte_errechnen()
                {
                        ::InputQuery("Volumen des Stoffs","Dichte",this->Volumen);
                        ::InputQuery("Masse des Stoffs","Dichte",this->Gewicht);
                        this->fDichte = this->Gewicht/this->Volumen;
                }
};

[edit]da war mal wieder jemand schneller[/edit]
 
Zuletzt bearbeitet:
Zurück