错误C2535:' ManagedArray :: ManagedArray(void)'

时间:2016-01-24 18:17:57

标签: c++

我正在研究一个项目,在多次搜索标题中的错误后,我几乎迷失了。如果我可以请一些帮助解决这个问题。

class ManagedArray
{

    public:

     float *elements;
     int numberOfElements; 

     /* default constructor */
     ManagedArray() :elements(NULL){};
     ManagedArray() :numberOfElements(0){}; <--Where the error is

     /*accessor*/
     int size() {return numberOfElements; }
     float get(int index) {return elements[index]; }

1 个答案:

答案 0 :(得分:0)

根据C ++标准(9.2级成员)

  
      
  1. ... 成员规范中不得声明成员两次,但嵌套类或成员类除外   模板可以声明然后定义,除了一个   可以使用opaque-enum-declaration和。引入枚举   后来用enum-specifier重新声明。
  2.   

您声明并定义了两次默认构造函数

 ManagedArray() :elements(NULL){};
 ManagedArray() :numberOfElements(0){}; <--Where the error is

您可以将参数添加到第二个构造函数,例如

 ManagedArray() :elements(NULL){};
 ManagedArray( int n ) :numberOfElements(n){};

或以下方式

 explicit ManagedArray( int n ) :numberOfElements(n){};
 ^^^^^^^^

考虑到最好不要键入int,而是将数据size_t用于数据成员numberOfElements,至少因为元素数量不能为负数。

两个构造函数也应初始化所有数据成员。

例如

 ManagedArray() :elements(NULL), numberOfElements( 0 ){};