c++ - 在类的成员变量定义时,使用此变量的带参数的构造函数来初始化,被编译器误解、报错。如何才能达到目的?
ringa_lee
ringa_lee 2017-04-17 15:03:04
0
3
560
using namespace std;

class A
{
public:
    A(int a) :m(a) {};
    void show() {
        cout << "m=" << m << endl;
    }
private:
    int m;
};

class B
{
public:
    A aa(5);//VS2015此处报错:“应输入类型说明符”。
//说明编译器把此处理解成了:声明一个名为aa、返回值为A,有一个入参的成员函数了。
//而本来的意图只是想定义一个名为aa的成员对象
};

int main(void)
{
    A a(44);
    a.show();
    return 0;
}
ringa_lee
ringa_lee

ringa_lee

모든 응답(3)
Ty80

너무 많이 생각하고 계십니다. 클래스 멤버 변수를 이렇게 선언할 수 없습니다.

으아악

매개변수가 없는 생성자 호출을 제외하고 다른 생성자 호출은 함수 호출이 실제 매개변수를 사용하고 유형 선언이 없기 때문에 모호하지 않습니다. 어떻게 함수 선언으로 오해될 수 있습니까?

Ty80

C 11 이상을 지원하는 컴파일러를 사용하는 경우 클래스 정의 시 멤버 변수를 초기화할 수 있습니다.
컴파일러에서 보고한 오류가 정확합니다. 여기서는 괄호를 사용하여 초기화 목록을 사용하거나 등호를 직접 사용할 수 있습니다.

으아악

물론 문서를 참조할 수 있는 몇 가지 세부정보가 있습니다.
http://en.cppreference.com/w/...

迷茫

정적 멤버로 변경하거나 생성자에서 초기화하세요.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿