2013-04-17 4 views
1
의 임시로부터 입력

내 클래스 구조는 다음과 같다 :잘못된 초기화 유형

Test_Camera.h :

class Test_Camera : public Camera_Interface { 
public: 
    Test_Camera (string const& aName); 
    ... 

Test_Camera.cpp

Test_Camera::Test_Camera(string const& aName) : Camera_Interface(0, 0, 0, 0), name(aName) 

에서 Test_Camera 개체를 인스턴스화하는 코드는 2 가지 시나리오가 있습니다. 첫 번째 컴파일은 괜찮지 만 두 번째는 발생하지 않으며 이유를 파악할 수 없습니다. 나는 또한 시도

error: invalid initialization of non-const reference to type 'Test_Camera&' from a temporary of type 'const char*'

:

string name = "cam"; 
Test_Camera& cam (name); //does not compile 
+0

[ints] (http : // ideone)과 동일한 오류 메시지가 표시됩니다. .com/Dlpinm) – Default

답변

6
기존 개체를 참조해야

참고 :

Test_Camera cam ("cam"); 
Test_Camera &cam_ref = cam; 
내가 두 번째 예제를 컴파일 할 때

Test_Camera cam ("cam"); // This compiles 

Test_Camera& cam ("cam"); // This does not compile 

는 오류가 발생합니다

+0

'Test_Camera & cam();을 할 때 왜 이렇게 컴파일됩니까? – Redek

+3

@Redek : 함수 프로토 타입이기 때문입니다. 컴파일러는'cam()'이'Test_Camera &'를 리턴하는 함수라고 가정합니다. –

+0

@phresnel 저의 혼란이 어디 있었는지 고맙습니다. 나는 논쟁의 여지가없는 생성자를 호출하고 있다고 생각했습니다. 지금은 훨씬 더 의미가 있습니다! – Redek