2013-03-14 2 views
2

이 프로그램에서 모양과 오류가 생성됩니다 준비하시기 바랍니다유효하지 않은 사용자 정의 변환

$ g++ inher2.cpp 
inher2.cpp: In function ‘int main()’: 
inher2.cpp:32:10: error: invalid user-defined conversion from ‘B()’ to ‘const B&’ [-fpermissive] 
inher2.cpp:14:6: note: candidate is: B::B(int) <near match> 
inher2.cpp:14:6: note: no known conversion for argument 1 from ‘B()’ to ‘int’ 
inher2.cpp:32:10: error: invalid conversion from ‘B (*)()’ to ‘int’ [-fpermissive] 
inher2.cpp:14:6: error: initializing argument 1 of ‘B::B(int)’ [-fpermissive] 

당신이 나를 찾을 수 있습니다 : 컴파일시

#include <iostream> 
using namespace std; 
    class A 
    { 
    public: 

     virtual void f(){} 
     int i; 
    }; 

    class B : public A 
    { 
    public: 
     B(int i_){i = i_;} //needed 
     B(){}    //needed 
     void f(){} 
    }; 

    int main() 
    { 

     //these two lines are fixed(needed) 
     B b; 
     A & a = b; 

     //Assignment 1 works 
     B b1(2); 
     b = b1; 

     //But Assignment 2 doesn't works 
     B b2(); 
     b = b2; // <-- error 
    } 

을, 나는 다음과 같은 오류가 발생합니다 문제? 그것은 함수 선언, 하지 변수 선언을 당신

+0

당신이 그것을 필요로 할 때 가장 괴롭히는 구문 분석 질문은 어디에 있습니까? – chris

+0

@chris 처음에 나는 대답을보기 전 까진 농담을한다고 생각했다. : vexing! ... :) thanks – rahman

답변

5

"B b2();" C의 '성가신 파싱'문제 ++이다 (see here - '가장 성가신 파싱'상기 모호한 구문 소요).

C++ 컴파일러는 함수를 선언한다는 것을 미리 선언합니다.

를 체크 아웃 :

int foo(); //A function named 'foo' that takes zero parameters and returns an int. 

B b2(); //A function named 'b2' that takes zero parameters and returns a 'B'. 

나중에 수행 할 때

당신이 기능을 할당하려고하는 것 같습니다
b = b2; 

(B2)를 변수에 (B) . 은 제로 매개 변수가있는 생성자를 호출 괄호없이 호출하면 괜찮을거야 : 자세한 내용을 보려면

B b2; 

, 참조 :

+2

그것은 "대부분"짜증나는 구문 분석이 아니다. 그것은 단지 짜증나게하고있는 parse 다! – Nawaz

+0

죄송합니다. –

+0

@Nawaz 무엇을 의미합니까? wikipedia에 대한 그의 링크의 제목은 "가장"괴롭힘이라고 말합니다! – rahman

2
B b2(); 

감사합니다!

함수 이름은 인수가없는 b2이며 B 유형의 개체를 반환합니다.

에 대한 검색은 C++에서입니다.

관련 문제