1

可能重复:
C++ 模板,链接错误
模板运算符重载函数上的未定义符号

所以我有一个抽象的 Button 类:

class Button
{
public:
    int x, y, width, height;
    std::string label, text;
    bool checkForClick(int mouseX, int mouseY);
    virtual void click(int mouseX, int mouseY) =0;
    virtual void draw(); //has a default implementation which can be overridden
};

和一个我想成为模板类的子类:

template <typename T>
class IncrementButton : public Button
{
public:
    T& controlValue;
    T increment;
    T minVal, maxVal;

    IncrementButton(T& controlValue) : controlValue(controlValue) {}

    void click(int mouseX, int mouseY);
    void draw(); 
};

被覆盖的方法如下所示:

template <typename T>
void IncrementButton<T>::click(int mouseX, int mouseY)
{
    //do something with controlValue
}

template <typename T>
void IncrementButton<T>::draw()
{
    //use value of controlValue
}

但这不会编译。它给了我错误:

Error   1   error LNK2001: unresolved external symbol "public: virtual void __thiscall IncrementButton<float>::click(int,int)" (?click@?$IncrementButton@M@@UAEXHH@Z)

...对于 draw() 也是一样的

有任何想法吗?我对 C++ 比较陌生,所以我希望我做错了一些愚蠢的事情。

4

1 回答 1

0

您可以通过将定义移动到头文件中来解决您的问题。虽然也有其他解决方案,但我会让其他人更好地解释它们 - 请参阅这些链接:

常问问题

另一个答案

于 2013-01-05T03:53:16.977 回答