[英]vtable C++ error after implementing pure virtual method
我在一個類中定義了一個純虛函數,如下所示:
template <typename T>
class PositioningMethod {
public:
virtual ApproximatePosition *getPosition(std::list<T*> &observedRadioSignals) = 0;
};
並在ParticleFilter中實現它,如下所示:
class ParticleFilter:public PositioningMethod<T> {
public:
virtual ApproximatePosition *getPosition(std::list<T*> &observedRadioSignals) {
/*Some code and return*/
return ApproximatePosition::from(xxxx, xxxx, xxxx());
}
};
但出現以下錯誤:
"ParticleFilter<KnownBluetoothBeacon<CartesianLocation>, RadioProximity<BluetoothBeacon>
>::getPosition(std::__1::list<RadioProximity<BluetoothBeacon>*, std::__1::allocator<RadioProximity<BluetoothBeacon>*> >&)", referenced from:
vtable for RadioProximityParticleFilter in lib.a(RadioProximityParticleFilter.o)
"ParticleFilter<KnownBluetoothBeacon<CartesianLocation>, RadioProximity<BluetoothBeacon>
>::ParticleFilter(std::__1::list<KnownBluetoothBeacon<CartesianLocation>, std::__1::allocator<KnownBluetoothBeacon<CartesianLocation> > >&, double)", referenced from:
RadioProximityParticleFilter::RadioProximityParticleFilter(std::__1::list<KnownBluetoothBeacon<CartesianLocation>, std::__1::allocator<KnownBluetoothBeacon<CartesianLocation> > >&, double) in lib.a(RadioProximityParticleFilter.o)
ld: symbol(s) not found for architecture arm64
我知道vtable錯誤通常發生在未實現的純虛函數上,但就我而言,它是相同的。 知道我哪里錯了嗎?
注意: 在將C ++代碼與iOS中的目標C集成時遇到的上述錯誤。 雖然在C ++中可以正常工作
下面的這一行導致ViewController.mm中的錯誤:
RadioProximityParticleFilter *obj = new RadioProximityParticleFilter (*asList,50);
我完成了您的代碼,可以在我的MS VS 2013測試項目中使用它,並且它可以正常工作-這是完整的清單:
#include <iostream>
#include <list>
using namespace std;
class ApproximatePosition
{
public:
static ApproximatePosition *from( int a, int b, int c)
{
cout << "from called." << endl;
return NULL;
}
};
class ListElem{};
template <typename T>
class PositioningMethod
{
public:
virtual ApproximatePosition *getPosition(std::list<T*> &observedRadioSignals) = 0;
};
template <typename T>
class ParticleFilter :public PositioningMethod<T>
{
public:
virtual ApproximatePosition *getPosition(std::list<T*> &observedRadioSignals)
{
/*dummy input and return*/
int a = 0, b = 0, c = 0;
cout << "getPosition called." << endl;
return ApproximatePosition::from( a, b, c );// xxxx, xxxx, xxxx());
}
};
int main()
{
PositioningMethod<ListElem> *pm = new ParticleFilter<ListElem>();
std::list<ListElem*> l;
pm->getPosition( l );
}
輸出為:
getPosition called.
from called.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.