klasse als Typ nicht möglich ?



  • hallo liebe coder,

    ich habe hier ein problem...
    ich sage auch nicht viel dazu, denn der code spricht für sich....

    ich will nur ein objekt gern übergeben bekommen...
    Hinzukommend jedoch bin ich nicht in der lage die elemente der
    struktur anzusprechen, obwohl die headers included sind...

    vielen dank im voraus..

    CPoint3D.h:

    #pragma once
    
    #include <stdio.h>
    #include "CPoint3DPolar.h"
    
    class CPoint3D
    {
    public:
    	// Die Parameter
    	struct MyPt
    	{
    		int		ValX	: 5; //5 Bit X ( 1.Koordinate )
    		int		ValY	: 5; //5 Bit Y ( 2.Koordinate )
    		int		ValZ	: 5; //5 Bit Z ( 3.Koordinate )
    		int		ValI	: 8; //8 Bit I (   Intensität )
    	};
    
    	// Setzt Polarkoordinaten in cartesische um
    	int Set( CPoint3DPolar &ptPol )
    	{
    		return 1;
    	};
    
    };
    

    ------------------------------------------------------------------------

    CPoint3DPolar.h:

    #pragma once

    #include <stdio.h>
    #include "CPoint3D.h"

    class CPoint3DPolar
    {
    public:
    	// Die Parameter
    	struct MyPtPol
    	{
    		int		ValA	: 5; //5 Bit X ( Winkel: Alpha )
    		int		Valß	: 5; //5 Bit Y ( Winkel: Beta  )
    		int		ValS	: 5; //5 Bit Z ( Entfernung    )
    		int		ValI	: 8; //8 Bit I ( Intensität    )
    	};
    
    	// Setzt cartesische Koordinaten in polare um
    	int Set( CPoint3D &pt )
    	{
    		return 1;
    	};
    
    };
    

    -------------------------------------------------------------------------

    Fehlermeldung in CPoint3DPolar.h:

    d:\PROGRAMMIEREN\c++\_net_2003\CPoint3D\CPoint3DPolar.h(23):
    error C2061: Syntaxfehler: Bezeichner 'CPoint3D'



  • Da brauchst du Forward-Deklarationen - und im Zweifelsfall mußt du sogar die Set()-Methoden aus den Headern auslagern.

    PS: Der Name "Valß" geht wirklich durch den Compiler 😮 ?



  • kann ich nicht alles in einer headerdatei stehen lassen ?

    und warum lassen sich meine elemente in der struktur im
    header selbst nicht ansprechen ?



  • Wenn du die Elemente der jeweils anderen Struktur nutzen willst, mußt du vorher die komplette Definition angeben (dafür reicht die Forward-Deklaration nicht aus). Allerdings arbeitet der Compiler von oben nach unten - und wer immer als erstes im fertig zusammengebauten Quellfile steht, hat "nur" die Forward-Deklaration des Partners zur Verfügung.

    x-coder44 schrieb:

    und warum lassen sich meine elemente in der struktur im
    header selbst nicht ansprechen ?

    Was meinst du jetzt damit? Die Elemente kannst du dort ansprechen, wo sie bekannt sind.



  • die elemente können jetzt angesprochen werden...
    war ein gedankenfehler von mir...

    aber ein objekt kann ich immer noch nicht übergeben,
    und bei nem anderen programm hatte das auch damals geklappt....

    die objekte sind doch durch die jeweiligen snderen header-files.h
    bekannt... ???



  • Zeig doch mal den Code, wie du Objekte übergeben willst.



  • das ist alles was ich hab....

    CPoint3DPolar.CPP:

    #pragma once
    
    #include <stdio.h>
    #include "CPoint3DPolar.h"
    
    // Setzt cartesische Koordinaten in polare um
    int CPoint3DPolar::Set( CPoint3D &pt )
    {
    	return 1;
    };
    

    -------------------------------------------------------------------------------

    CPoint3DPolar.h:

    #pragma once
    
    #include <stdio.h>
    #include "CPoint3D.h"
    
    class CPoint3DPolar
    {
    public:
    	// Die Parameter
    	struct MyPtPol
    	{
    		int		ValA	: 5; //5 Bit X ( Winkel: Alpha )
    		int		Valß	: 5; //5 Bit Y ( Winkel: Beta  )
    		int		ValS	: 5; //5 Bit Z ( Entfernung    )
    		int		ValI	: 8; //8 Bit I ( Intensität    )
    	};
    
    	// Setzt cartesische Koordinaten in polare um
    	int CPoint3DPolar::Set( CPoint3D &pt ){}
    };
    

    -----------------------------------------------------------------------------

    CPoint3D.CPP:

    #pragma once
    
    #include <stdio.h>
    #include "CPoint3D.h"
    
    // Setzt Polarkoordinaten in cartesische um
    int CPoint3D::Set( CPoint3DPolar &ptPol )
    {
    	return 1;
    };
    

    -----------------------------------------------------------------------------

    CPoint3D.h:

    class CPoint3D
    {
    public:
    	// Die Parameter
    	struct MyPt
    	{
    		int		ValX	: 5; //5 Bit X ( 1.Koordinate )
    		int		ValY	: 5; //5 Bit Y ( 2.Koordinate )
    		int		ValZ	: 5; //5 Bit Z ( 3.Koordinate )
    		int		ValI	: 8; //8 Bit I (   Intensität )
    	};
    
    	// Setzt Polarkoordinaten in cartesische um
    	int Set( CPoint3DPolar &ptPol ){}
    };
    

    ..............................................................................
    ..............................................................................
    ..............................................................................

    ich will halt das objekt in der set-methode übergeben können,
    und eigentlich müsste ja auch beispielsweise die klasse "CPoint3DPolar" als typ anerkannt werden... oder nicht ?



  • Erstens wird dir da der Linker auf die Füße treten, wenn du die Methoden inline (leer) UND normal definierst - ersetze mal die {} durch ein Semikolon.

    Zweitens benötigst du vermutlich noch ein Hauptprogramm, um etwas mit deinen Klassen machen zu können - und dort kannst du dann z.B. sowas schreiben:

    CPoint3D kartesich;
    CPoint3DPolar polar;
    ...
    kartesich.Set(polar);
    

    Drittens solltest du die Parameter als konstante Referenzen übergeben - außer die Set()-Methoden sollen die übergebenen Punkte verändern.

    Und viertens kommt mir der Variablenname Valß immer noch fragwürdig vor.



  • habe alles verändert,
    jedoch beschwert er sich in den header-files weiterhin über die deklaration der jeweiligen typen (die ja die klassen sind...)

    d:\PROGRAMMIEREN\c++\_net_2003\CPoint3D\CPoint3D.h(27): error C2061: Syntaxfehler: Bezeichner 'CPoint3DPolar'
    d:\PROGRAMMIEREN\c++\_net_2003\CPoint3D\CPoint3DPolar.h(27): error C2061: Syntaxfehler: Bezeichner 'CPoint3D'
    d:\PROGRAMMIEREN\c++\_net_2003\CPoint3D\CPoint3DPolar.h(27): error C2061: Syntaxfehler: Bezeichner 'CPoint3D'



  • Versuch's doch mal mit den erwähnten Forward-Deklarationen anstelle der wechselweisen Einbindung der Header. (in den CPP's mußt du dann jeweils beide Header einbinden)



  • wie recht du hast...

    danke für die foreward definition....

    klappt wunderbar.....


Anmelden zum Antworten