2017-01-09 1 views
0

주 파일에서 세 번째로 선언 된 변수에 num을 전달할 때 문제가 발생합니다.배열을 생성자에 전달하면 크기가 1 인 배열이 생성됩니까?

주 파일의 정수 배열을 내 생성자에 전달하면 생성자는 첫 번째 배열 요소에 대한 포인터 만받습니다. 배열의 주소를 생성자에게 전달하여 배열의 모든 부분을 my treeArray 클래스의 멤버 포인터로 복사 할 수 있도록 배열을 전달할 수 있습니까?

treeArray.h

class treeArray 
{ 
private: 
int arraySize; 
int* arr; 

public: 
//Constructors 
treeArray(); 
treeArray(int capacity); 
treeArray(treeArray& passed); //copy constructor 
treeArray(int passed[]); 

//Destructor 
~treeArray(); 

//Get Functions 
int getArrCap(); 

//Display functions 
bool displayArray(); 
}; 

treeArray.cpp :

//copy an array of ints to a treeArray 
treeArray::treeArray(int passed[]) 
{ 
//get the size of the array passed and assign it to member array size 
this->arraySize = sizeof(passed)/sizeof(passed[0]); 

this->arr = new int[this->arraySize]; 

for(int i = 0; i < this->arraySize; i++) 
    this->arr[i] = passed[i]; 
} 

주 : 여기에서 배열 포인터 붕괴로

int nums[] = {7, 9, 10, 15}; 

treeArray first; 
treeArray second(5); 
treeArray third(nums); 
treeArray fourth(third); 


cout << "Arrays: " << endl << "#1: "; 
first.displayArray(); 
cout << endl << "#2: "; 
second.displayArray(); 
cout << endl << "#3: "; 
third.displayArray(); 
cout << endl << "#4: "; 
fourth.displayArray(); 
cout << endl << endl; 
+0

사용해야 크기가합니다. 배열의 첫 번째 요소에 포인터를 전달하고 있습니다. –

+0

어떻게 그 페이지를 찾지 못했습니다! 고마워, 그게 내가 필요한거야. 그리고 나는이 질문을 삭제할 것입니다. Martin Bonner에게 도움을 주셔서 감사합니다! (idk 만약 내가 그것을 삭제하거나 지금 그것에 대해 생각하는 허용) – zicameau

+0

나는 * 당신 * 중복으로 닫을 수 있다고 생각합니다. 중복에 대한 SO 정책은이를 닫지 만 삭제하지 않기 때문에 다른 사람이 더 쉽게 찾을 수 있습니다. –

답변

0
treeArray::treeArray(int passed[]) 
{ 
    ... 
    this->arraySize = sizeof(passed)/sizeof(passed[0]); 

} 

참고 sizeof(passed)은 (sizeof(pointer-to-int) 인), 당신은 단지 함수에 배열을 전달하는 경우가 배열의 크기를 해결 할 수는 없습니다

(포인터가 보통 int의 같은 크기로) refore sizeof(passed)/sizeof(passed[0]) 당신이 눈치 만 1로 보통이다. 보통 추가 매개 변수 (예 : array_size)는 배열 자체와 함께 전달되어야합니다.

0

treeArray(int passed[]);treeArray(int* passed);과 같습니다.

당신이 (당신이 생각하는 무엇이든간에) 생성자에 배열을 전달하지 않는

template<std::size_t N> 
treeArray(int (&passed)[N]); 

또는

treeArray(int passed[], std::size_t size); 
관련 문제