Kopier-Konstruktor aufrufen?!



  • CStoll schrieb:

    (meine Kristallkugel ist atm zur Reparatur :D)

    Der Spruch kommt in jedem Thread mit so einer exakten Fehlerbeschreibung aber ich find trotzdem 😃



  • Wenn das in jedem Thread kommt, wer kann denn dann endlich Mal Deine Kristallkugel reparieren? 😞 Service-Urwald Deutschland oder wie war das.



  • Das sind zwei sog. "conversion constructor".
    Und um sie aufzurufen musst du erstmal ein passendes Objekt haben, also ein CStereoCalibration oder CCalibration Objekt.
    Also z.B. so:

    void foo()
    {
        CStereoCalibration calib/*(eventuell, noetige, parameter)*/;
        COpenGLCapture cap(calib);
    }
    


  • Hallo Hustbaerleider funktioniert der Code nicht:

    *c:\1a\ivt\examples\calibrationapp\src\organizer.cpp(76): error C2079: 'calib' verwendet undefiniertes class 'CStereoCalibration'

    1>c:\1a\ivt\examples\calibrationapp\src\organizer.cpp(77): error C2259: 'COpenGLCapture': Instanz von abstrakter Klasse kann nicht erstellt werden
    1> aufgrund folgender Member:
    1> "void COpenGLCapture::DrawScene(void)": ist abstrakt
    1> c:\1a\ivt\src\videocapture\openglcapture.h(97): Siehe Deklaration von 'COpenGLCapture::DrawScene'

    1>c:\1a\ivt\examples\calibrationapp\src\organizer.cpp(77): error C2664: 'COpenGLCapture::COpenGLCapture(const CCalibration &)': Konvertierung des Parameters 1 von 'int' in 'const CCalibration &' nicht möglich
    1> Ursache: Konvertierung von 'int' in 'const CCalibration' nicht möglich
    1> Quelle oder Ziel hat einen unvollständigen Typ*

    Ich habe auch conversion constructor gegoogelt, aber leider kein Beispiel mit Aufruf gefunden, welches meinem Problem entspricht.



  • Nochmal ausführlich:

    Header:

    class COpenCVCapture : public CVideoCaptureInterface
    {
    public:
    	// constructor
    	COpenCVCapture(int nIndex, const char *pFilename = 0);
    	// destructor
    	~COpenCVCapture();
    	// public methods
    	bool OpenCamera();
    	void CloseCamera();
    	bool CaptureImage(CByteImage **ppImages);
    	int GetWidth();
    	int GetHeight();
    	CByteImage::ImageType GetType();
    	int GetNumberOfCameras() { return 2; }
    
    private:
    	// private attributes
    	CvCapture *m_pCapture;
    	_IplImage *m_pIplImage;
    	const int m_nIndex;
    	std::string m_sFilename;
    };
    
    #endif /* _OPEN_CV_CAPTURE_H_ */
    

    Konstruktor:

    COpenGLCapture::COpenGLCapture(const CStereoCalibration &stereoCalibration)
    {
    	m_nCameras = 2;
    
    	width = stereoCalibration.width;
    	height = stereoCalibration.height;
    	type = CByteImage::eRGB24;
    
    	m_pOpenGLVisualizer = new COpenGLVisualizer();
    	m_pStereoCalibration = new CStereoCalibration();
    	m_pCalibration = 0;
    
    	m_pStereoCalibration->Set(stereoCalibration);
    }
    

    wie rufe ich jetzt das Ding auf?



  • Was ist denn an den Fehlermeldungen so schwer zu verstehen? Du hast ein Include vergessen und die Funktion DrawScene nicht implementiert.



  • ich glaube nicht, dasss das problem ist. OPenGL ist konsisten und richtig installiert.
    Ich wie rufe ich die Funktion auf?



  • StephanKr schrieb:

    ich glaube nicht, dasss das problem ist. OPenGL ist konsisten und richtig installiert.

    Wer hat das bezweifelt?



  • ... weil alles included und implementiert ist. Mann muss nur eine Headerdatei includen. in dieser stehen dann weiter und so weiter. Ich möchte doch nur wissen wie ihr diese Funktion aufrufen würdet???!!!



  • Tja, bei der Beratungsresistenz ist wohl Hopfen und Malz verloren ...



  • manni66 schrieb:

    Tja, bei der Beratungsresistenz ist wohl Hopfen und Malz verloren ...

    👍

    StephanKr schrieb:

    ... weil alles included und implementiert ist.

    Was hat Inkludation mit Implementation zu tun?

    Allgemein: Ich glaube, du kapierst nicht genau, was dein Problem ist. Du denkt es liegt am Copy-CTor und willst ein Beispiel. Bitteschön:

    struct foo
    {
      foo(){};
      foo(const foo& obj){*this = obj};
    };
    foo bar1;
    foo bar2(bar1);
    

    Und was hat dir das gebracht? hustbaer hat eine korrekte und auf deine Klasse spezifische Lösung angegeben. Wenn das nicht funzt, machst du definitiv selber etwas falsch.



  • 1.Satzzeichen sind keine Rudeltiere.
    2.COpenGLCapture ist eine abstrakte Klasse. Abstrakte Klassen kann man nicht instanzieren, d.h. den CTor nicht aufrufen. Lösung: Mach das es keine abstrake Klasse mehr ist - implementiere die Funktion
    void COpenGLCapture::DrawScene(void)
    Das hat manni66 dir auch schon gesagt.
    3.COpenGLCapture braucht zur Konstruktion ein Objekt vom typ CCalibration oder CStereoCalibration. Die erste Zeile der Fehlemeldung sagt, dass diese Klassen nicht bekannt sind. Also hast du wohl ein inlcude vergessen. Auch das hat manni66 gesagt.
    4.Werf mal die Vorstellung weg das du da irgendwie wüsstest was du tust. Du hast nämlich nicht wirklich Ahnung.



  • StephanKr schrieb:

    c:\1a\ivt\examples\calibrationapp\src\organizer.cpp(76): error C2079: 'calib' verwendet undefiniertes class 'CStereoCalibration'

    Dazu müsstest du den richtigen Header includen (der OpenGLCapture-Header hat nur eine Forward-Deklaration).

    *1>c:\1a\ivt\examples\calibrationapp\src\organizer.cpp(77): error C2259: 'COpenGLCapture': Instanz von abstrakter Klasse kann nicht erstellt werden
    1> aufgrund folgender Member:
    1> "void COpenGLCapture::DrawScene(void)": ist abstrakt
    1> c:\1a\ivt\src\videocapture\openglcapture.h(97): Siehe Deklaration von 'COpenGLCapture::DrawScene'
    *

    Die Klasse ist abstrakt, also mußt du eine eigene Klasse von ihr ableiten und dort die DrawScene()-Methode mit Inhalt füllen.
    (die COpenCVCapture-Klasse ist dagegen nicht abstrakt, dehalb kannst du sie auch problemloser verwenden)


Anmelden zum Antworten