2013-08-11 3 views
0

어떻게 배열의 차원을 메인 프로그램에서 설정할 수 있습니까?배열에서`int '에서`int *'로의 변환이 무효입니다

나는 클래스 Loza가 있고 개체 (용량 및 가격 설정)를 만들고 "용량"정수가 들어있는 필드를 만듭니다. aray[i] = 1; 컴파일러는 말할 것이다 : 내가 좋아하는 분야 에 다른 번호를 설정 할 때

invalid conversion from `int' to `int*' in array 

는이 문제를 어떻게 해결할 수 있습니까? 난 그냥 당신의 배열이 int *의 배열, int 아닌 배열로 선언

class Loza { 
public: 

    Loza(int capacity, int price) { 
     this->capacity = capacity; 
     this->price = price; 
     *aray = new int[capacity]; 
     for (int i = 0; i < capacity; i++) { 
      aray[i] = 0; 
     } 
    } 
    virtual ~Loza(); 

    void info(); 

    bool set(int i) { 
     if (aray[i] == 0) { 
      aray[i] = 1; 
      return true; 
     } else { 
      return false; 
     } 
    } 

    int getCapacity() const { 
     return capacity; 
    } 

    int getPrice() const { 
     return price; 
    } 

    void setCapacity(int pocetMiest) { 
     this->capacity = pocetMiest; 
    } 

    void setPrice(int cenaMiesta) { 
     this->price = cenaMiesta; 
    } 

private: 
    int capacity; 
    int price; 
    int *aray[]; 
}; 
+1

'int * array []'? 왜? –

+0

C 배열을 사용할 필요가 없으며 포인터와'new'를 사용할 필요가 없습니다. – chris

답변

3

Carl의 답변에 이어 어레이의 크기를 조정하는 것은 중요한 작업입니다. 배열의 용량을 설정하려면 힙에 새 공간을 생성하고 ('new'사용) 이전 배열을 복사 한 다음 이전 배열을 삭제해야합니다. 대신 vector<int>을 사용해야하는데, 이는 힙 주변의 공간 이동을 처리합니다.

0

다른 번호 (0/1)에 필드에 인덱스에 대한 일련의 요소를 원한다. 또한 잘못 작성하고 있습니다. 당신이 진정으로 원하는 것은 :

int *aray; 

과 :

aray = new int[capacity]; 

그뿐만 아니라, 당신의 setCapacity 방법은 실제로 당신이 만드는 배열의 용량을 변경하려고 나타나지 않습니다. 그것은 조만간 당신을 물 것입니다.

실제 C++ 사람들은 "배열을 사용하지 마십시오"라고 말할 것입니다. 이미 원하는 것을 수행하는 C++ 컨테이너가 있습니다.

관련 문제