C++ C++;:以模板对象为参数的模板。引起的联动误差

C++ C++;:以模板对象为参数的模板。引起的联动误差,c++,templates,linkage,C++,Templates,Linkage,我已经搜索了很长时间,但没有找到任何问题的答案(尽管我尝试了一些我发现的技术)。问题是: 我应该创建一个包含两个参数的模板:整数和对象(另一个模板的实例)。尽管这个模板类继承了其他模板,但我认为这些类不是问题的一部分。下面是代码: template <typename Type, const ConPol<Type>& Div> class ModPol : public Pol<Type>, public VecF<Type, Div.siz

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

我应该创建一个包含两个参数的模板:整数和对象(另一个模板的实例)。尽管这个模板类继承了其他模板,但我认为这些类不是问题的一部分。下面是代码:

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

};
模板
ModPol类:公共Pol、公共VecF{
私人:
//
受保护的:
//
公众:
//构造函数和析构函数
ModPol()
虚拟~ModPol();
};
当我尝试调用此特定类时,我使用以下行:

const ConPol<int> poly;
ModPol<int, &poly> modpoly;
conspol poly;
ModPol-modpoly;
不幸的是,我遇到了以下错误:

错误:非类型模板参数引用对象“poly” 这没有联系

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


干杯

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

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

因此不允许使用
poly
,因为它是
const
,因此具有内部链接

解决方案是覆盖默认设置,并表示希望
poly
具有外部链接:

extern const ConPol<int> poly;
extern const ConPol poly;

另外,他应该传递“poly”而不是“&poly”,因为引用是预期的,而不是指针。谢谢你们两位的回答,它似乎编译正确。我的编译器仍然为其余部分找到错误:“错误:类型为'std::size_t'(也称为'unsigned long')的非类型模板参数不是整型常量表达式”此错误与“Div.size()”有关,但我真的不知道如何绕过它。