2016-06-26 1 views
-3

몇 가지 가능한 입력 (i, c, l, v ..)이있는 간단한 프로그램을 작성했습니다. 첫 번째 입력은 "i m n"이며, 여기서 m 및 n은 정수 값입니다. 이 명령은 m 행과 n col로 구성된 2D 배열을 생성합니다. 여기 내 코드는 다음과 같습니다.생성자가 작동하지 않습니다 "오류 : '(<class name>) (int &, int &)에 대한 호출과 일치하지 않습니다."

class myarray 
{ 
    char** grid; 
    int dimX,dimY; 
public: 
    myarray(){grid=0;} 
    myarray(int m,int n) {grid = new char* [m]; for(int i=0;i<m;i++) {grid[i]=new char [n];} dimX=m; dimY=n;} 
    ~myarray(){for(int i = 0; i < dimX; ++i) {delete[] grid[i];} delete[] grid;} 
    char** fetcharray(){return grid;} 

int main() 
{ 
    srand(time(NULL)); 
    bool check(true),arrayinitialized(false); 
    while(check) 
    { 
     char a; //a-firstinp; 
     int m,n; //m,n-grid size 

     cin>>a; 

     myarray c; 

     switch(a) 
     { 
     case 'i': 
     case 'I': {cin>>m>>n; 
        **c(m,n);** 
        arrayinitialized=true; 
        break;} 
     case ...:... 
     default:{cout<<"Invalid input! Try again: "; break;} 

그러나 'i'의 경우 오류가 발생합니다. ...; c (m, n); "오류 : '(myarray) (int &, int &)'에 대한 호출과 일치하지 않습니다." " 변수 myarray c를 선언 할 때; 로컬 변수 (myarray c (m, n))의 경우 모든 것이 잘 작동합니다. 그러나 변수 c를 다른 경우에서 액세스 할 수있게하려면 main() 함수 전체에서 사용할 수 있어야합니다 (위 코드 에서처럼). 누구나 잘못 알고 있고 어떻게 해결할 수 있습니까? 미리 감사드립니다.

+0

'char **'대신'vector >'를 사용하면 많은 두통을 줄일 수 있습니다. – aschepler

답변

1
myarray c;  
c(m, n); 

- 두 번째 줄은 operator()을 가지고 myarray이 필요합니다. 생성자를 호출하지 않습니다. (다시?)

사용의 시점에서

myarray c(m, n); 

을 시도하거나 myarray가 제대로 복사 가능한하고


c = myarray(m, n); 
나는 기본 생성자가 파손되어 있음을 말하는 몇몇 사람을 기억 , 복사본 할당 ... The Rule of three. 그럼 어서가!


I want the variable c to be accessible by other cases

그럼 루프 외측에 있어야한다.

+1

지금부터 나는 항상 3의 규칙을 사용할 것입니다! 고맙습니다! – ficabj5

관련 문제