2014-10-11 3 views
0

세 개의 배열을 포함하는 삼각형을 나타내는 간단한 클래스가 있습니다.C++ 배열 형식이 복사 생성자에서 할당 할 수 없습니다.

class Triangle 
{ 
public: 
    double   X[3]; 
    double   Y[3]; 
    unsigned char color[3]; 
}; 

힙에이 클래스의 객체를 만든 다음 배열의 값을 사용할 함수에 전달하려고합니다. 이러한 객체를 전달하기 때문에 전체 복사본을 만들기 위해 복사 생성자가 필요합니다. 문제는 복사 생성자에 새 배열을 할당 할 때 발생합니다.

나는 다음과 같은 오류가 계속
Triangle (const Triangle &obj) 
{ 
    X = new double[3]; 
    Y = new double[3]; 
    color = new unsigned char[3]; 
    for (int i=0; i<3; ++i) 
    { 
     X[i] = obj.X[i]; 
     Y[i] = obj.Y[i]; 
     color[i] = obj.color[i]; 
    } 
} 

: "오류 : 배열 유형을 '더블 [3]'할당 할 수없는"세 배열의 각

이것은 내가 지금까지 가지고있는 것입니다.

나는 this video에서 논의 된 것과 같은 접근법을 취하고 있으며 왜 새로운 배열을 만들 수 없는지 알 수 없다. this question에 대한 답변도 같은 접근법을 사용합니다.

통찰력이있는 사람이 있습니까? 나는 정말로 어리석은 무엇인가를 놓치고있는 것처럼 느낀다.

+3

세 가지 동적 할당을 모두 잃습니다. 아무 것도 필요하지 않습니다. 사실, 전체 생성자를 잃고 기본값을 사용하십시오. – WhozCraig

+2

YouTube 동영상을 보면서 C++을 배우려고하지 마십시오. 좋은 책을 구하십시오. –

답변

1

I am taking the same approach as discussed in this video.

비디오에서 그는 member-initializer list을 사용하여 어레이를 초기화 한 것을 볼 수 있습니다. 멤버 초기화 자 목록과 그것이 생성자 본문에 데이터 멤버를 지정하는 것과 어떻게 다른지 읽어보십시오.

그는 포인터를 사용하고 new으로 동적으로 할당 된 것을 볼 수 있습니다. 컴파일 할 때 배열의 크기를 알 수없는 경우에 필요합니다 (sic). 귀하의 경우에는 3으로 알려져 있으므로 new은 필요하지 않습니다.

배열을 선언하면 배열이 생깁니다. 공간이 이미 배열에 할당 되었기 때문에 새로운 메모리를 할당하고 복사 할 필요가 없습니다. @WhozCraig가 말했듯이 복사 생성자가 필요하지 않습니다. 왜냐하면 여러분은 어쨌든 여러분이 필요로하는 것을 암시 적으로 생성 할 것이기 때문입니다.

The answer to this question also has the same approach.

단순한 C++은 Java가 아닙니다.

0

왜냐하면 'X', 'Y'및 'color'는 포인터 유형이 아니기 때문입니다. 딥 복사가 없어도 해당 배열이 할당되고 동일한 값을 갖습니다. 새로운 배열은 삼각형 생성자에서 할당 할 수없는

0

이유는 X와 Y 필드를 두 배로 포인터 아니라는 것을, 그들은 배열 double 형의이다.

difference between arrays and pointers in C and C++에 대해 많은 혼란이 있습니다. 이 경우 새로운 삼각형이 생성 될 때 메모리가 할당되어 6 개의 2 중 3 개의 부호없는 문자를 가질 수 있으며 컴파일러는 의 주소를, ,의 시작 주소에 지정합니다 전체 클래스에 할당 된 메모리

+0

아, 알겠습니다. 나는 그것이 의미가 있다고 생각하지만, 사물은 여전히 ​​올바르게 작동하지 않습니다.삼각형 배열을 'new'로 만든 다음 각 삼각형에 대한 참조를 각 삼각형 내의 배열을 초기화하는 함수로 전달합니다. 이니셜 라이저 함수가 돌아 오면 삼각형 값이 해당 함수 외부로 변경되지 않으므로 삼각형을 값으로 전달한 것처럼 작동합니다. & triangleArray [0] 함수를 함수에 전달하더라도 삼각형 배열이 다르게 작동합니까? –