이전에 C++에서 실행 한 적이 없지만 여전히 컴파일되지만 예상 한대로 작동하지 않는 것은 이상합니다. 누군가 그것이하는 일을 내게 말할 수 있습니까? 자세한 내용은 코드를 참조하십시오.C++에서 클래스 인스턴스화 : 이상한 구문 버그
#include <iostream>
using namespace std;
class Test{
public:
Test();
};
Test::Test(){ cout << "ctor" << endl; }
int main(void){
Test t(); // this compiles but doesn't call the constructor
return(0);
}
그것은 컴파일,하지만 난 "t"를 사용하려고하면 그것을하지 않습니다 것입니다. 필자는 생성자 기능에만 의존하고 있었고 코드가 예상대로 작동하지 않았습니다. 해결 방법은 괄호 "Test t();"를 잃는 것입니다. "Test t;"로 이동하십시오. 내 질문은 "Test t();"에서 진행되고있는 작업입니다. 예를 들어, 컴파일러가 컴파일을 할 수 있다고 생각하는 것은 무엇입니까?
가장 골치 아픈 구문 분석을 찾기 :
가장 쉬운 방법은 괄호 제거하고 단순히로 변수를 선언 얻을 수 있습니다 구문 분석 수정 합니다. – chris
귀하의 Rite of Passage에 오신 것을 환영합니다. –
질문은 컴파일러가 당신이 무엇을 기대하고 있었는지 알고 있었습니까? :) – Carl