2014-06-21 53 views
0
#include<stdio.h> 
#include<stdlib.h> 

class CROSS 
{ 
    public: 
    const int x; 
    const int y; 

    CROSS(int X, int Y): x(X), y(Y) 
    { 
    } 

    ~CROSS() {} 
}; 

CROSS** Generate_Cross_Array(int M, int N) 
{ 
    CROSS** cross; 
    cross = new CROSS*[M]; 
    for(int i=0; i<M; ++i) 
    { 
     cross[i] = new CROSS[N]; 
     for(int j=0; j<N; ++j) 
     { 
      CROSS cross[i][j](i, j); 
      printf("%d, %d\n",cross[i][j].x, cross[i][j].y); 
     } 
    } 
    return cross; 
} 
,

我想創建一個2維對象數組並初始化它在函數Generate_Cross_Array(int,int),但g ++告訴我如下:錯誤:沒有匹配的函數調用'構造函數'注:候選人是:

In file included from main.cc:3:

cross.h: In function ‘CROSS** Generate_Cross_Array(int, int)’:

cross.h:23: error: no matching function for call to ‘CROSS::CROSS()’

cross.h:10: note: candidates are: CROSS::CROSS(int, int)

cross.h:5: note: CROSS::CROSS(const CROSS&)

cross.h:26: error: variable-sized object ‘cross’ may not be initialized

謝謝任何​​給我任何解決方案的人。

回答

2

如果你打算使用動態分配的數組,你必須提供一個默認的構造函數。像這樣的東西是合適的:

CROSS(int X = 0, int Y = 0): x(X), y(Y) 

如果這是不是一種選擇,可以考慮使用一個標準庫容器而不是,即std::vector

+0

+1,只是指出問題出在'cross [i] = new CROSS [N];'行,編譯器無法構造沒有默認ctor的對象數組。另一方面,'cross = new CROSS * [M];'行是可以的,因爲你正在爲'CROSS'分配指針而不是調用任何ctor。 – vsoftco

+0

非常感謝你們。我認爲我必須採取其他一些方法來解決問題。 – luo4neck

相關問題