Problem mit rückbezüglichen classen !!
-
Ich hab folgendes Problem...
Ich habe die classen "vector" und "matrix" die sich gegenseitig benutzten.
Jedoch wird das nicht akzepztiert ... es kommt immer eine nicht bekannter type auf ( matrix/vector ) ...
Code:
Matrix.h
#pragma once #include "vector.h" class matrix { private: public: matrix(); ~matrix(); inline void Set( vector a ) { } };
Vector.h
#pragma once #include "matrix.h" class vector { private: public: vector(); ~vector(); inline void Set( matrix a ) { } };
StdAfx.h
#pragma once #include <windows.h>
matrix.cpp
#include "stdafx.h" #include "vector.h" #include "matrix.h"
vector.cpp
#include "stdafx.h" #include "matrix.h" #include "vector.h"
kannden Fehler einfach nicht finden ....
-
Das geht so nicht. Du kannst aber Refernzen und Pointer einer Klasse benutzen,
wenn nur der Prototyp bekannt ist. Also: In einen Header den Prototyp der anderen
Klasse reinschreiben: class foo;
-
Super thx
-
JayJay schrieb:
Ich habe die classen "vector" und "matrix" die sich gegenseitig benutzten.
Für was braucht denn ein Vektor eine Matrix
-
vector matrix multiplikationen zb
desweiteren lässt sich ne matrix schön als vector darstellen, wenn man sie mit nem 1/1/1 vector multipliziert
-
Taurin schrieb:
Das geht so nicht. Du kannst aber Refernzen und Pointer einer Klasse benutzen,
wenn nur der Prototyp bekannt ist. Also: In einen Header den Prototyp der anderen
Klasse reinschreiben: class foo;Eine Deklaration einer Klasse reicht solange du deren Namen nur für die Definition von Pointern oder Referenzen oder für die Deklaration von Funktionsparameter bzw. Rückgabewerten verwendest. Folgendes ist also ok:
class Vector; class Matrix { public: void set(Vector vec); };
-
HumeSikkins schrieb:
Taurin schrieb:
Das geht so nicht. Du kannst aber Refernzen und Pointer einer Klasse benutzen,
wenn nur der Prototyp bekannt ist. Also: In einen Header den Prototyp der anderen
Klasse reinschreiben: class foo;Eine Deklaration einer Klasse reicht solange du deren Namen nur für die Definition von Pointern oder Referenzen oder für die Deklaration von Funktionsparameter bzw. Rückgabewerten verwendest. Folgendes ist also ok:
class Vector; class Matrix { public: void set(Vector vec); };
es ist leider eine falsche Lösung, weil Vector type incomplate ist:
Comeau C/C++ 4.3.3 (Aug 6 2003 15:13:37) for ONLINE_EVALUATION_BETA1
Copyright 1988-2003 Comeau Computing. All rights reserved.
MODE:strict errors C++"ComeauTest.c", line 6: error: incomplete type is not allowed
void set(Vector vec){};
^1 error detected in the compilation of "ComeauTest.c".
In strict mode, with -tused, Compile failed
so soll es sein:
[cpp]void set(Vector **&**vec);[/cpp]
-
@ssm
Lies meinen Beitrag genauer und du wirst feststellen, dass mein Beitrag völlig ok ist.
Ich sprach von Deklaration. Wenn du die Methode *definierst* brauchst du selbstverständlich auch die *Definition* der Parameter (für Referenzen reicht hier eine *Deklaration* des referenzierten Typs solange du keine Dereferenzierung durchführst). Bei der *Deklaration* einer Methode reicht es hingegen auch, wenn die Parametertypen nur *deklariert* wurden.
-
HumeSikkins schrieb:
@ssm
Lies meinen Beitrag genauer und du wirst feststellen, dass mein Beitrag völlig ok ist.
Ich sprach von Deklaration. Wenn du die Methode *definierst* brauchst du selbstverständlich auch die *Definition* der Parameter (für Referenzen reicht hier eine *Deklaration* des referenzierten Typs solange du keine Dereferenzierung durchführst). Bei der *Deklaration* einer Methode reicht es hingegen auch, wenn die Parametertypen nur *deklariert* wurden.ja du hast recht, ich habe nicht aufmerksam deine Antwort gelesen
-
ssm schrieb:
es ist leider eine falsche Lösung, weil Vector type incomplate ist:
Comeau C/C++ 4.3.3 (Aug 6 2003 15:13:37) for ONLINE_EVALUATION_BETA1
Copyright 1988-2003 Comeau Computing. All rights reserved.
MODE:strict errors C++"ComeauTest.c", line 6: error: incomplete type is not allowed
void set(Vector vec){};
^1 error detected in the compilation of "ComeauTest.c".
In strict mode, with -tused, Compile failed
so soll es sein:
[cpp]void set(Vector **&**vec);[/cpp]
Müsste das nicht .cpp sein ?
Devil
-
devil81 schrieb:
Müsste das nicht .cpp sein ?
nein