2016-04-04 25 views
0

Ich habe die Hauptklasse "Arm", es hat viele Attribute wie lang oder Ellbogen, aber es hat als Attribut ein Objekt der Klasse "Hand". Die Hand hat verschiedene Methoden und Attribute, daher ist es wichtig, sie zu einer anderen Klasse zu machen.Objekt als Attribut eines anderen Objekts C++

Meine Frage ist, wie ein Objekt als ein Attribut einer anderen Klasse in C++ zu verwenden? (I'm Microsoft Visual Studio)

die Klasse Hand ist

auf hand.h

class hand 
{ 
private: 
     int number_of_fingers; 
public: 
     void handleSomthing(); 
} 

und die Klasse Arm ist

auf arm.h

#include "hand.h" 
class arm 
{ 
private: 
     float long; 
     int elbow; 
     hand right; 
} 

Aber wenn ich "hand.h" auf Arm einschließe, tritt ein Fehler auf, der

sagt

Fehler C2011: ‚Hand‘: neue Definition des Typs ‚Klasse‘

Wenn ich versuche, hand.h zu verwenden und erstellen und Objekte auf dem Hauptprogramm verwenden es funktioniert, so ist das Problem nicht an der Klassenhand denke ich.

Ich bin OOP und ich werde versuchen, wirklich zu lernen, schätzen Ihre Hilfe

+0

Können Sie einen minimalen Code posten, wo wir den Fehler finden könnten? http://stackoverflow.com/help/mcve – Guiroux

+0

https://en.wikipedia.org/wiki/Include_guard –

Antwort

0

Die Klassendeklarationen am Ende ein Semikolon muss.

class hand { private: int number_of_fingers; public: void handleSomthing(); }; 

#include "hand.h" 
class arm { private: float long; int elbow; hand right; }; 
0

arm.h

#include "hand.h" 

class arm 
{ 
private: 
    float length; 
    int elbow; 
    hand right; 
}; 

hand.h

class hand 
{ 
private: 
    int number_of_fingers; 
public: 
    void handleSomthing(); 
}; 

Sie können einen Variablennamen nennen lang:

float long 

lange eine Art ist, sollten Sie nennen es Länge

float length 
+0

Danke anscheinend der Fehler war, dass ich #include "hand.h" auf dem Hauptprogramm schrieb (main.cpp) und oben auf dem Arm.h. Also wenn ich ein Objekt aus dem Klassenarm erstellt habe, habe ich zweimal die Kopfzeile "handhat" .h Der korrekte Weg ist, hand.h nur in die Datei einzuschließen, in der Arm geschrieben wird. Danke für die Beantwortung Jenn –

+0

Sie müssen Compiler-Flag auf Ihrer Header-Datei setzen, so dass Sie es mehrmals einschließen können. Siehe [hier] (http://stackoverflow.com/questions/1653958/why-are-ifndef-and-define-used-in-c-header-files) –

Verwandte Themen