2012-01-17 5 views
0

여기 내 코드입니다객체를 구축 및 호출 회원 기능

#include <iostream> 

using namespace std; 

class MyTestClass 
{ 
    int MyTestIVar; 

    public: 
     MyTestClass(void); 
     int firstCallMethod(void); 
     int secondCallMethod(void); 
}; 

MyTestClass::MyTestClass(void) 
{ 
    MyTestIVar = 4; 
} 
int MyTestClass::firstCallMethod(void) 
{ 
    return secondCallMethod(); 
} 
int MyTestClass::secondCallMethod(void) 
{ 
    return MyTestIVar; 
} 

int main(int argc, char *argv[]) 
{ 
    MyTestClass mTC; 
    cout << mTC.firstCallMethod() << endl; 
    return 0; 
} 

경우에는 사용을 사용하는 대신

MyTestClass mTC(); 

는 어떤 멤버 함수를 호출하는 저를 허용하고이 오류

./experiment.cpp: In function ‘int main(int, char**)’: ./experiment.cpp:31:14: error: request for member ‘firstCallMethod’ in ‘mTC’, which is of non-class type ‘MyTestClass()’

를 표시합니다

나는 가치 등등에 포스트를 읽었다, 그러나이 과실은 나에게 논리적 인 것처럼 보이지 않는다. 왜 이것이 회원 기능에 영향을 미칩니 까? 당신이 생각하는

그리고 크게는 MyTestClass 클래스의 객체를 선언하지 않습니다

+0

이 코드 예제는 오류를 재연하는 데 충분합니까? 또한 "MyTestClass mTC;"줄을 바꾸면 "MyTestClass mTC();"와 함께 그때 만 오류가 발생합니까? –

답변

5
MyTestClass mTC();  

:-) 감사합니다 도움이됩니다.

사실 매개 변수를 취하지 않고 MyTestClass 개체를 반환하는 mTC이라는 이름으로 함수를 선언합니다.

이것은 C++에서 Most Vexing Parse으로 알려져 있습니다.

+0

이상한, 파서 오류에 대한 오류가 아니기 때문에 C++에서는 함수 내에서 함수를 선언 할 수 없기 때문에? 또는 함수 내에서만 함수를 정의 할 수 없습니까? – rubixibuc

+0

@rubixibuc : 그것은 C++의 이상한 어두운 구석 중 하나입니다. 당신이 그것에 물릴 때 알게되고, 그것을 아는 대부분의 사람들이 나를 물었습니다. :) –

3

당신은 most vexing parse을 우연히 발견했습니다.

MyTestClass mTC(); 

라인은 인수가 없으며 MyTestClass의 인스턴스를 반환 mTC라는 함수의 함수 프로토 타입으로 구문 분석됩니다.