2012-02-07 4 views
0

0과 1의 배열을 처리하기 위해 C++로 클래스를 만들었습니다. 개인 속성에는 크기, 유형 및 지정된 크기에 대한 정수 배열이 있습니다.생성자를 다시 호출 할 때 객체의 C++ private 멤버가 수정되었습니다.

제 문제는 배열의 값이 생성자를 다시 호출 할 때마다 수정된다는 것입니다. 좀 더 자세히 살펴보면, 생성자를 사용하여 첫 번째 객체를 만든 다음 두 번째 객체를 생성하고 첫 번째 객체를 수정하여 첫 번째 객체를 수정합니다.

나는 포인터, 새로운 연산자, const 개체에 const 포인터를 가지고 놀려고했지만 아무런 효과가 없다! 이상적인 배열의 크기는 내가 선택한 배열의 크기의 값으로 수정 된 배열 값의 세 번째, 여섯 번째, 그 다음 아홉 번째 등입니다. 제안이 감사하겠습니다. 내 코드에서

일부 추출물 :

class SArray 
{ 
private: 
    int SArray_Size; 
    int DType; 
    int Table[]; 
public: 
    //complete constructor 
    SArray::SArray(const int& tsize, const int& ttype) 
    { 
    SArray_Size = tsize; 
    DType = ttype; 
    if (ttype == 0) //random array with integer values between 0 and 1 
    { 
     for (int i = 0; i < getSize(); i++) 
     { 
     Table[i] = rand() % 2; 
     } 
    } 
    if (ttype == 1) //default array with only 1s 
    { 
     for (int i = 0; i < getSize(); i++) 
     { 
     Table[i] = 1; 
     } 
    } 
    } 

}; 

int main() 
{ 
    const int NbRes = 15; 
    //reset the random number generator 
    srand(time(0)); 
    const SArray test3(NbRes,1); 
    (test3).print(); 
    const SArray test1(NbRes,1); 
    (test1).print(); 
    (test3).print(); 
    return 0; 
} 
+0

당신이 완전한 테스트 케이스를 게시 할 수 없습니다 : 예를 들어

? 관련 코드를 볼 수 없다면 문제가 무엇인지 추측하기 어렵습니다. –

+0

버그는 아니지만, 왜'test3.print();'대신'(test3) .print();'를 써야합니까? 여분의 중괄호는 나에게 매우 이상하게 보입니다 ... – catchmeifyoutry

답변

2

당신은 "표"에 대한 메모리를 할당해야합니다. 예 :

SArray::SArray(const int& tsize, const int& ttype) 
{ 
    SArray_Size = tsize; 
    DType = ttype; 
    Table= new int[tsize]; 
    ... 

소멸자에서 해제하는 것을 잊지 마십시오.

+1

'테이블'은 OP 코드에서 포인터 타입이 아닙니다 ... –

+0

또는 더 나은 것은'std :: vector ' – KillianDS

+0

을 사용합니다 @OliCharlesworth : 절대적으로, 저의 실수 . 그래서 어딘가에 뭔가 빠져 있습니다 ... – patriiice

3

범인은 int Table[]입니다. 테이블의 크기를 지정하지 않았습니다.

실제로는 std::vector<int> Table;으로 바꾸고 tsize으로 초기화해야합니다.

#include <vector> 

class SArray 
{ 
    private: 
    int DType; 
    std::vector<int> Table; 
    public: 
    const size_t getSize() const { return Table.size(); } 
    public: 
    SArray::SArray(const int tsize, const int ttype) : 
     DType(ttype), Table(tsize) 
    { 
     int i, n = getSize(); 
     switch(ttype) 
     { 
     case 0: 
      for (i = 0; i < n; ++i) 
      Table[i] = rand() % 2; 
      break; 
     case 1: 
      for (i = 0; i < n; ++i) 
      Table[i] = 1; 
      break; 
     } 
    } 
}; 
+0

천재, 정말 고마워! –

관련 문제