2014-10-15 5 views
0

Vertex 유형의 배열을 만든 다음 함수에서 각 멤버를 초기화하려고합니다. 함수에 내가 이것을 시도,"constructor"을 호출하는 일치 함수가 없습니다

class Application 
{ 
    //... 
    private: 
     Vertex data[3]; 
    //... 
}; 

및 소스 파일 : 나는이 같은 배열을 선언

Vertex::Vertex(const Vector3f& position) : position(position) { } 

헤더 파일에서 다음 Vertex 클래스는 생성자에 Vector3f 소요

data[0] = Vertex(Vector3f(0, 0, 0)); 
data[1] = Vertex(Vector3f(0, 0, 0)); 
data[2] = Vertex(Vector3f(0, 0, 0)); 

하지만 컴파일 할 때이 오류가 얻을 :

/home/mert/dev/C++/C++3D/src/Application.h: In constructor ‘Application::Application()’: 
/home/mert/dev/C++/C++3D/src/Application.h:31:19: error: no matching function for call to ‘Vertex::Vertex()’ 
    Application() { } 
       ^

배열을 정점 포인터로 선언하고 나서 data = new Vertex[3];을 시도했지만 그 결과는 동일했습니다. 이 문제를 해결하려면 어떻게해야합니까?

+0

Vertex에는 이와 같은 배열 내부에 기본 생성자가 필요합니다. –

+0

인수가없는 생성자를 의미합니까? –

+0

예 또는 기존 매개 변수가있는 기존 생성자. –

답변

1

Vertex 클래스에는 기본 생성자가 없습니다. 개체 배열을 선언 할 때 각 배열 항목은 기본 생성자를 호출하여 작성됩니다. 기본 construcoror를 추가하거나 Vertex 포인터의 배열을 선언 한 다음 개체를 인스턴스화 할 때 올바른 생성자를 호출하여이 문제를 해결할 수 있습니다.

+2

후자 대신에'std :: vector '을 만들고 다시 푸시하는 것이 더 낫습니다. –

+0

@NeilKirk : 물론 아닙니다! 항상 정확히 3 가지 요소가 있기 때문에 심하게 설계되고 런타임에 형벌을 받게됩니다. 원시 배열을 피하기 위해'std :: array '을 사용할 수 있습니다. 조금이라도 이득이 있긴하지만. – Deduplicator

+0

@Deduplicator "벡터 포인터의 배열을 선언 한 다음 객체를 인스턴스화 할 때 올바른 생성자를 호출하는 것"과 비교하여 new'ing이라고 가정합니다. –

관련 문제