0
我有一個模板化的接口和模板實現。我也有一個方法將接口的專門化作爲參數。我收到一個鏈接器錯誤:C++鏈接器錯誤與模板虛擬方法
"symbol(s) not found for architecture...
這是爲什麼?實現這個目標的正確方法是什麼:一個可以與各種類型一起工作的接口,一個可以與各種類型一起工作的實現,以及一個接受專用於給定類型的接口的方法?
下面的例子只是一個簡單的例子,我的實際類有不同的功能。
感謝
#include <iostream>
template<class T>
class IStore{
public:
virtual T get() = 0;
virtual void set(T t) = 0;
};
template<class T>
class SimpleStore : public IStore<T>{
public:
T get() override{ return value; }
void set(T t) override{ value = t; }
private:
T value;
};
void Print(IStore<double> mydouble){ std::cout<<mydouble.get(); }
int main(int argc, const char * argv[]) {
SimpleStore<double> one;
one.set(1.0);
Print(one);
return 0;
}
你說得對,用'打印(IStore&mydouble)'來代替'Print(IStore mydouble)'作品。我仍然不明白爲什麼。 –
user1188374
您正在迫使編譯器嘗試鏈接純虛函數,以便爲永遠不可實例化的類創建虛擬表。它應該導致更好的錯誤,但無論如何。 –
我不得不閱讀你的評論5次瞭解,但我想我明白了。謝謝! – user1188374