2012-05-24 5 views
-2

저는 C++ 전문가가 아니기 때문에이 오류를 다양한 시도에서 반복하려고했습니다. 사실 내가 할 wanto로 2 3 클래스와 작은 프로그램을 할 때, 아무런 오류가 없다는 것입니다. 하지만 주요 applicaiton에서 나는 심지어 (말도 안되는) 솔루션을 많이 시도해도 오류가 지속 쓰려고 해요.생성자에서 포인터 (* &)를 전달할 때 이상한 오류가 발생했습니다.

문제는 내가 자원으로 생성자를 취하는 다른 구체적인 동작을 나타내는 전략 패턴과 일부 리소스를 포인터로 인스턴스화하는 주 클래스가 있다는 것입니다. 주요 응용 프로그램에서

,() 초기화하기 :

device = new Kinect(); 
controls = new Gui(); 

UserPositionBehaviour = new UserPositionBehaviour(device, controls); 

하고, 행동 생성자 :

UserPositionBehaviour(Kinect * device, Gui * controls); 

이 오류입니다 :

src/App.cpp:30: error: no matching function for call to ‘UserPositionBehaviour::UserPositionBehaviour(Kinect*&, ofTrueTypeFont*&, ofxGui*&)’ 
src/UserPositionBehaviour.h:15: note: candidates are: UserPositionBehaviour::UserPositionBehaviour(Kinect*, ofxGui*, ofTrueTypeFont*) 
src/UserPositionBehaviour.h:13: note:     UserPositionBehaviour::UserPositionBehaviour(const UserPositionBehaviour&) 

어은? 헤이, 무슨 일 이니? 내가 포인터를 전달 해요, 아니 * & (그게 내가 어떻게 이벤트를 읽을 줄 몰라)

어떤 조언?

당신이 진정으로 생성자가있는 경우

+3

우리에게 표시되는 코드는 두 개의 인수로 구성된 생성자를 보여줍니다. 오류 메시지에는 3 개의 인수와 1 개의 인수가 있다고합니다. 여기 뭔가가 잘못되어 있습니다. 실제 코드를 보여줄 수 있습니까? –

+0

두 개의 인수를 허용하는 생성자가 나타나지 않습니다. – hmjd

+1

기대하고있는 것과 다른 버전의'UserPositionBehaviour'를 포함하는 헤더를 포함하고있을 가능성이 있습니까? – molbdnilo

답변

3

오류 메시지에 따르면, 두 개가 아닌 세 개의 인수로 생성자를 호출하고 있으며 마지막 두 개는 잘못 된 것입니다.즉 실제 오류 메시지가 있다면

는, 다음 코드는 아마 다음과 같습니다

UserPositionBehaviour = new UserPositionBehaviour(device, font, controls); 
//              ^^^^ ^^^^^^^^ 

되어야한다 :

UserPositionBehaviour = new UserPositionBehaviour(device, controls, font); 
//              ^^^^^^^^ ^^^^ 

코드가 정말 당신이 게시 한 것처럼 않은 경우, 그 오류 메시지를 준다면, 정말 이상한 일이 일어나고있다. 이 경우 완전한 조사 가능한 예제를 게시하여 자세히 조사 할 수 있도록하십시오.

gcc의 오류 메시지에서 여분의 &을 무시할 수 있습니다. 값 또는 참조로 인수를 사용하는 함수를 찾는 것이 이상한 방법입니다.

+0

감사합니다. 내 뇌가 끓어 오르고 있습니다! – nkint

1

이 코드는 컴파일해야 .. 난 단지 couts을 기반으로 간단한 경우에 오류를 복제하려고했지만 somewhereelse 숨겨진 몇 가지 오류가 mayebe 때문에 아무런 문제가 없다

UserPositionBehaviour(Kinect * device, Gui * controls); 

컴파일러에 따라, 당신이하지 않는, 정의 다음 *&은 단순히 당신이 PO를 통과 의미

src/UserPositionBehaviour.h:15: note: candidates are: UserPositionBehaviour::UserPositionBehaviour(Kinect*, ofxGui*, ofTrueTypeFont*) src/UserPositionBehaviour.h:13: note:
UserPositionBehaviour::UserPositionBehaviour(const UserPositionBehaviour&)

즉, 생성자 내부에서 수정할 수 있습니다.

3

오류를 발생시키는 코드는 생각할 때 두 개가 아닌 세 개의 인수를 전달하며 마지막 두 개는 잘못된 순서로 전달됩니다. 잘못된 버전의 소스 파일이나 그와 비슷한 것을보고 있어야합니다.

src/UserPositionBehaviour.hsrc/App.cpp의 오래된 복사본이 컴파일러가 실제로 컴파일하는 버전을 보는 대신에 보았을지도 모르는 바보 같은 것들이 있는지 확인하십시오. 또는 미리 컴파일 된 헤더를 사용하고 있으며 뭔가 잘못 처리 된 것일 수 있습니다.

찾을 수없는 기능에 대한 오류 메시지는 일반적으로 다음과 같습니다. Foo *&은 "Foo에 대한 포인터에 대한 참조"유형이며, 이는 인수 표현식이 lvalue 포인터 대 Foo임을 의미합니다. 호출 이 값으로 포인터를 취하는 함수 또는 참조로 포인터를받는 함수와 일치 할 수 있습니다. 컴파일러는 하나도 찾지 못했지만 오류 메시지에 대해 뭔가를 골라야하고 컴파일러가 그 중 하나를 선택합니다. 호출에 device 대신 인수 표현식 device+0이 포함 된 경우 device+0의 결과가 일시적이기 때문에 비 const 참조로 전달할 수 없으며 오류 메시지는 &이 아닙니다.

관련 문제