0

在我的一个小项目中,我遇到了这样的情况:

// Header file
template <typename T>;
class AClass
{
public:
    virtual void doSomething() const;
private:
    std::vector<T> *v;
};

// separate cpp file
template <typename T>
void AClass<T>::doSomething() const
{
    // use the vector here
}

// main.cpp
#include "AClass.h"

int main()
{
    AClass<int> anObject;
    anObject.doSomething();

    return 0;
}

这段代码编译得很好,但无法链接,因为在主文件中链接器无法找到 AClass 的实现,除非我将其添加到 cpp 文件中:

template class AClass<int>;

但这只是愚蠢的,因为它带走了使用模板的优势。

现在的问题是:有没有办法在不使用 cpp 文件中的类转发的情况下解决链接问题,或者这不可能在单独的 .h 文件和 .cpp 文件中有类似的东西?提出前向类声明对我来说不是一个选择。

我真的很想对此进行澄清。

谢谢

4

0 回答 0