gpt4 book ai didi

C++ : template taking template object as parameter. 链接错误导致

转载 作者:太空狗 更新时间:2023-10-29 23:00:26 24 4
gpt4 key购买 nike

我已经搜索了很长时间,但没有找到我的问题的任何答案(尽管我尝试应用我发现的一些技术)。这是问题所在:

我应该创建一个带有 2 个参数的模板:整数和对象(另一个模板的实例)。尽管这个模板类继承自其他模板,但我认为这些类不是问题的一部分。所以这是代码:

template <typename Type, const ConPol<Type>& Div> 
class ModPol : public Pol<Type>, public VecF<Type, Div.size()>{
private:
//

protected:
//

public:
// constructors & destructor
ModPol()
virtual ~ModPol();

};

当我尝试调用这个特定的类时,我使用这些行:

const ConPol<int> poly;
ModPol<int, &poly> modpoly;

不幸的是,我得到了这个错误:

error: non-type template argument refers to object 'poly' that does not have linkage

我想知道如何实例化我的模板类。不要犹豫,用简单的词来解释(我认为自己是初学者)。

干杯!

最佳答案

当您在 C++ 中声明一个 const 的全局对象时,默认情况下它具有内部链接。这意味着该对象与其他源文件中具有相同名称和类型的任何对象无关。

但是有一条规则,如果您将对对象的引用作为模板参数传递,那么它必须具有外部链接 - 即无论在哪个文件中使用它,都必须引用完全相同的对象的名称。

所以 poly 是不允许的,因为它是 const,所以有内部链接。

解决方案是覆盖默认值并说您希望 poly 具有外部链接:

extern const ConPol<int> poly;

关于C++ : template taking template object as parameter. 链接错误导致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33710097/

24 4 0