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


Anmelden zum Antworten