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

时间:2015-11-14 15:39:22

标签: c++ templates linkage

我已经搜索了很长时间,并没有找到我的问题的任何答案(即使我尝试应用我发现的一些技术)。问题在于:

我应该创建一个带有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;

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

  

错误:非类型模板参数是指对象&#39; poly&#39;        那没有联系

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

干杯!

1 个答案:

答案 0 :(得分:1)

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

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

因此polyconst,因此它是poly,因此具有内部链接。

解决方案是覆盖默认值并假设您希望extern const ConPol<int> poly; 具有外部链接:

[
  {
    "id":86374,
    "course":[
      "artificial intelligence",
      "data structure",
      "linear algebra"
     ]
   }
   {
    "id":12319,
    "course":[
      "data structure",
      "algorithm",
      "database",
      "linear algebra"
     ]
   }
...


]