C++:模板以模板对象为参数。导致的链接错误

C++ : template taking template object as parameter. Linkage error caused

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

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

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();

};

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

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

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

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

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

干杯!

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

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

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

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

extern const ConPol<int> poly;