Moin,
ich muss derzeit eine alte C++ Software umgestalten. Dabei müssen unter anderem verschiedene Kameras angesprochen werden. Dazu wollte ich eine Manager-Klasse machen, in welcher die Bilder entsprechend synchron oder zeitversetzt angefordert werden können. Da verschiedene Kameras zum Einsatz kommen, wollte ich ein Interface benutzen. Dieses sieht bis jetzt so aus:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#pragma once
#include <memory>
#include <qobject.h>
#include "Types.h"
class IToFCamera : public QObject
{
Q_OBJECT
public:
virtual ~IToFCamera() = 0;
signals:
void newImageAvailable();
// Public Functions
public:
virtual bool isConnected() = 0;
virtual bool connect() = 0;
virtual bool requestImage() = 0;
virtual bool acquireImage() = 0;
virtual CloudPtr getImage() = 0;
};
|
Nun wollte ich dieses Interface in einer Klasse implementieren:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#pragma once
#include "IToFCamera.h"
class O3DCamera : public IToFCamera
{
Q_OBJECT
public:
// Constructors / Destructors
O3DCamera();
virtual ~O3DCamera();
// Public Functions
public:
virtual bool isConnected();
virtual bool connect();
virtual bool requestImage();
virtual bool acquireImage();
virtual CloudPtr getImage();
};
|
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#include "O3DCamera.h"
O3DCamera::O3DCamera()
{
}
O3DCamera::~O3DCamera()
{
}
bool O3DCamera::isConnected()
{
return true;
}
bool O3DCamera::connect()
{
return true;
}
bool O3DCamera::requestImage()
{
return true;
}
bool O3DCamera::acquireImage()
{
return true;
}
CloudPtr O3DCamera::getImage()
{
return CloudPtr(new PointCloudRGB);
}
|
Dies resultiert allerdings in folgendem Linkerfehler:
Fehler 3 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: virtual __thiscall IToFCamera::~IToFCamera(void)" (??1IToFCamera@@UAE@XZ)" in Funktion ""public: virtual __thiscall O3DCamera::~O3DCamera(void)" (??1O3DCamera@@UAE@XZ)". [...]\O3DCamera.obj <ProjektName>
Ich habe ehrlich gesagt noch nie mit Interfaces in C++ gearbeitet und habe gerade keine Ahnung was ich gegen das nicht aufgelöste Symbol von dem virtuellem Destruktor des Interfaces machen kann.
Wie benutze ich so ein Interface richtig?