Klassen und verwendung im Hauptprogramm
-
Guten Tag zusammen,
ich arbeite mit Visual Studios 2010 und bin noch ein sehr blutiger Anfänger
.
Beschäftigen uns Gerade in unserm Kurs mit Klassen und deren Verwendung im Hauptprogramm.Vs schmeißt mir ein Fehler raus den ich nicht verstehe, mag mir das jemand erklären? Danke schonmal im Vorraus,
Hier der gesammte Code:
#include "stdafx.h"
#include <iostream>
#define _USE_MATH_DEFINESusing namespace std;
class tetra {
private:
int m_a, m_volumen;public:
bool setKante (int a) {
if (a>=0) {
m_a=a;
m_volumen= 1/12*a*a*a*1,414213562;
return true;
}
else return false;cout<<"a muss >0 sein!";
}
int getKante() {return m_a;}
int getVolumen() {return m_volumen;}}
int _tmain(int argc, _TCHAR* argv[])
{
int a;cout<<"geben sie die kantenlänge ein:"; cin>>a;
cout<<"Das Volumen des Tetraeders ist: " <<tetra.getVolumen();
system("pause");return 0;
}Danke schonmal im Vorraus

-
Klassen sind Objektbeschreibungen. Du kannst nur Objekte benutzen. Mit der Beschreibung eines Messers kannst du auch kein Brot schneiden.
-
nun hab ich glatt die Fehlermeldung vergessen.
Das tetra von tetra.getvolumen() ist rot unterschrichen.
"Ein nicht statischer Memberverweis muss relativ zu einem bestimmten Objekt sein. "
-
knivils Antwort gilt immer noch. Du versuchst gerade mit dem Lexikoneintrag zu einem Messer dein Brot zu schneiden.
Du musst ein Objekt vom Typ tetra erzeugen. Dann kannst du auch dessen Memberfunktionen benutzen. Hier ist dies bei dir sehr ungünstig gelöst, da es möglich ist, get_volumen vor set_kante zu benutzen, wodurch man irgendwelchen Unsinn bekäme. Ein Objekt sollte immer (oder zumindest wenn möglich) voll funktionsfähig erzeugt werden. Ein Tetraeder ohne Kantenlänge ist schließlich sinnlos. Du möchtest also wahrscheinlich noch einen passenden Konstruktor für deine Klasse schreiben.
P.S.: Falls du nicht weißt, wie das mit dem Erzeugen von Objekten geht: Dein
int a;erzeugt praktisch ein Objekt vom Typ int, mit einem Objekt vom Typ tetra ginge das äquivalent. Aber wenn du dies noch nicht wusstest, solltest du ganz dringend nochmal die passenden Kapitel in deinem Lehrbuch ein weiteres Mal durchlesen.
-
Das ist nicht einzige Fehler. Der größte Fehler ist in Zeile 25, da fehlt das Semikolon hinter der schließenden Klammer der Klasse.
Der Fehler den du beschreibst, das ist genau der Fall, den mein Vorredner beschreibt. Du hast kein Objekt, sondern du nutzt dort die Klasse. Das ist falsch.
Oh, jetzt wo ich genauer drüberlese, fallen mir noch viel mehr Fehler auf:
//#include "stdafx.h" #include <iostream> #include <tchar.h> #define _USE_MATH_DEFINES using namespace std; class tetra { int m_a; int m_volumen; public: bool setKante (int a) { // wieso soll diese Funktione twas zurückgeben? if ( a >= 0 ) { m_a = a; m_volumen = 1/12 * a * a * a * 1,414213562; // 1,41... ist keien Kommazahl, sondern 2 Zahlen durch Komma getrennt -> 1.41... return true; } else return false; cout<<"a muss >0 sein!"; // diese Anweisung wird niemals ausgeführt, vorher wird schon returnt } int getKante() { return m_a; } int getVolumen() { return m_volumen; // oben willst du mit Kommazahlen rechnen, aber volumen ist eine ´Ganzzahl } }; int _tmain(int argc, _TCHAR* argv[]) { int a; tetra t; cout << "geben sie die kantenlänge ein: "; cin >> a; t.setKante(a); // besser über Konstruktor lösen cout << "Das Volumen des Tetraeders ist: " << t.getVolumen() << endl; system("pause"); // nicht so ganz gut, siehe FAQ return 0; }Das sind mal die Dinge, die mir spontan eignefallen sind...
-
Wow, ok da wird mir einiges Klarer, danke für die ausführliche Bearbeitung
