读书人

C++编译异常

发布时间: 2012-03-21 13:33:15 作者: rapoo

C++编译错误
不罗嗦了, 直接贴代码.

C/C++ code
#include <iostream>using namespace std;class A {public:    A(): a(3) {cout<<"constructor"<<endl;} //如果打印:"constructor", 则说明构造方法被调用    int a;};int main() {    A b();    //这里是构建一个类A的实例, 结果没有成行;             //构造方法也没有调用, 因为没有"constructor"打印出来.//    b.a = 4;     //编译错误: request for member 'a' in 'b', which is of non-class type 'A()'    return 0;}


[解决办法]
A b();

=>

b是一个函数,返回A的一个object


A b;就可以了。
[解决办法]
楼上正解
[解决办法]
探讨

构建A类对象应该用如下语法:
A b = new A();
可以简写为 A b; 此处构造函数并无参数

[解决办法]
C/C++ code
A b(); //表示一个函数签名。A b; // 才是定义。
[解决办法]
A b(); //这里是构建一个类A的实例, 结果没有成行;

编译器 语法分析发生二义性
即可解释为 返回A对象的 b 函数
又可解释为 A的对象b

此时根据c++标准,选择第一种解释。优先解释成声明
[解决办法]
类的实例语句有问题…
[解决办法]
探讨
如果调用带参构造函数, 就是这样:
A a(4);
如果是无参构造函数, 就是这样:
A a;

这样感觉不统一啊.

[解决办法]
恩,写法有问题

读书人网 >C++

热点推荐