为什么报错
#include<iostream>
using namespace std;
class Myclass
{
public:
Myclass(int a,int b)
{
a=2,b=3;
{
std::cout<<"a= " << a<<"b= "<< b<<std::endl;
}
}
public:
int aa=5;
int bb=6;
};
int main()
{
Myclass m(1,2);
return 0;
}
--------------------Configuration: Cpp1 - Win32 Debug--------------------
Compiling...
Cpp1.cpp
C:\C++\test\Cpp1.cpp(14) : error C2258: illegal pure syntax, must be '= 0'
C:\C++\test\Cpp1.cpp(14) : error C2252: 'aa' : pure specifier can only be specified for functions
C:\C++\test\Cpp1.cpp(15) : error C2258: illegal pure syntax, must be '= 0'
C:\C++\test\Cpp1.cpp(15) : error C2252: 'bb' : pure specifier can only be specified for functions
执行 cl.exe 时出错.
Cpp1.exe - 1 error(s), 0 warning(s)
正在回答
你好,构造函数可以分为两个阶段执行:(1)初始化阶段;(2)普通的计算阶段(即可以是那些赋值语句之类的。)
不管成员是否在构造函数初始化列表中显示初始化,类类型的成员总是在初始化阶段初始化。
比如这样一个class:
class A {
public: A(int ii);
private: int i; const int ci; int &ri;
};
在执行构造函数A(int ii)时都要先初始化,再能执行构造函数体内的赋值。
那么ci和ri如果不在初始化列表里初始化,是不能执行完初始化操作的。也就是说,初始化const或者引用类型数据成员的唯一机会就是在构造函数初始化列表中。
所以上述构造函数可以写为 A::A(int ii) : ci(ii), ri(ii) {i = ii;}
如果解决您的问题请采纳,祝学习愉快!
- 参与学习 529 人
- 提交作业 110 份
- 解答问题 593 个
无论您是零基础、还是想晋升,亦或是想转型,C++无疑都是最佳选择。本路径共分为基础语法、指针与引用、面向对象三大模块,为你开启入门C++编程的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星