2009-12-15 1 views
1

일부 C++/CLI 코드를 작성하는 데 특이한 오류가 발생했습니다. 일부 데이터를 보유하는 클래스의 복사본을 만들려고합니다. 나는 시도하고 다음과 같이 클래스의 사용을 만들 때적절한 기본 생성자를 사용할 수 없습니까?

public ref class RawDataPacket 
{ 
protected: 
    float* m_internalData; 

public: 
    RawDataPacket(const float* newInternalData); 
    RawDataPacket(const RawDataPacket^ rdp); 
    RawDataPacket(RawDataPacket^ rdp); 
    RawDataPacket(); 
}; 

:

void SomeClass::SomeFunction(RawDataPacket^ rdp) 
{ 
    // Send a copy of the packet to anyone interested. 
    RawDataPacket^ rdp1 = gcnew RawDataPacket(rdp); 
    ForwardData(rdp1); 
} 

를 내가 얻을 : 같은

클래스는 정의

error C2512: 'RawDataPacket' : no appropriate default constructor available 

내가 생각 RawDataPacket(); 그게 덮여 있었나요? .. 나는 거기에서 정말로 명백한 무엇인가 놓치고있다?

[편집]RawDataPacket()의 본문은 다음과 같습니다

RawDataPacket::RawDataPacket() 
{ 
    m_internalData = nullptr; 
} 

가 [Edit2가] 전체 컴파일러의 출력은 다음과 같습니다

1>------ Build started: Project: MySoftware, Configuration: Debug Win32 ------ 
1>Compiling... 
1>RawDataPacket.cpp 
1>Controller.cpp 
1>.\Controller.cpp(452) : error C2512: 'MySoftware::RawDataPacket' : no appropriate default constructor available 
1>Build log was saved at "file://c:\Projects\Experiments\MySoftware\Debug\BuildLog.htm" 
1>MySoftware - 1 error(s), 0 warning(s) 
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ========== 
+0

RawDataPacket()의 본문을 종료합니까? –

+0

그것은 "적절한 기본 컨스트럭터"가되어야하는 것처럼 보입니다. 그러나 그것은 당신이 당시 사용하고있는 생성자가 아닙니다. Step-Into를 할 때, 그것은 당신의 컨스트럭터 중 하나에 들어가고 그런 다음 그 에러를 던집니다? 또는 그냥 SomeClass :: SomeFunction 함수 줄에 해당 오류를 던질합니까? – Jrud

답변

3

가 알았어요! Controller 클래스의 헤더에 RawDataPacket 클래스를 전달한다고 선언했습니다.

거기에 헤더를 포함하고 전달 선언을 제거해 보았습니다. 그래서 클래스를 전방 선언 했음에도 불구하고 Controller.cpp에 헤더를 포함하는 것을 잊어 버렸습니다.

그걸 찾아내는 것은 더러운 것일 수 있습니다. 모두에게 도움을 청했습니다!

1

생성자에 매개 변수가있는 경우 생성자 앞에 명시 적으로 사용하십시오.