2015-12-16 163 views
0

我想写一个模板类的拷贝构造函数。我有这个类:模板类拷贝构造函数

template<int C> 
class Word { 
    array<int, C> bitCells; //init with zeros 
    int size; 

public: 
    //constructor fill with zeros 
    Word<C>() { 
     //bitCells = new array<int,C>; 
     for (int i = 0; i < C; i++) { 
      bitCells[i] = 0; 
     } 
     size = C; 
    } 
    Word<C>(const Word<C>& copyObg) { 
     size=copyObg.getSize(); 
     bitCells=copyObg.bitCells; 
    } 
} 

我有错误,与拷贝构造函数,在intilizeing大小的线,我得到: “在这一行 多个标记 - 过客‘常量字< 16>’作为“这INT字的论点 '::的getSize()与诠释C = 16]' 丢弃预选赛[ - fpermissive] - 参数无效 '考生:整数的getSize()'”

什么是错与此? 谢谢

+2

第一步:在构造函数名称后面删除''。 –

+1

根据该错误,您的代码片段中不包含的成员'getSize()'是非''const'成员:使其成为'const'成员。 –

+0

是这样的:“Word(const Word &copyObg)”?这是为什么? (仍然是相同的错误..) – Atheel

回答

0

问题是你的getSize()没有被宣布为const。让它如此:

int getSize() const { return size; } 
3

我会写的类是这样的:

template <std::size_t N> 
class Word 
{ 
    std::array<int, N> bit_cells_; 

public: 
    static constexpr std::size_t size = N; 

    Word() : bit_cells_{} {} 

    // public functions 
}; 

注:

  • 无需动态的大小,因为它是类型的一部分。

  • 不需要特殊的成员函数,因为隐式定义的函数很好。

  • 通过constructor-initializer-list将成员数组初始化为零。

  • 模板参数是无符号的,因为它代表了一个计数。

+0

关于你的最后一点:这具有破坏类似'static_assert(N> = 0,“数组大小必须为正值”);'的负面后果,'如果Word的模板参数为不是一个负整数,而是一些编译时计算的负面结果('Word ')。这与使用无符号函数参数的问题基本相同。 –

+0

@ChristianHackl:的确,这是一个引起争议的话题。 –