为什么报错

为什么报错

#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)


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

你好,构造函数可以分为两个阶段执行:(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;}

如果解决您的问题请采纳,祝学习愉快!

  • broodopq 提问者 #1
    可以理解为构造器是用来给在类里的成员变量赋值的吗?没有其他方法再类里直接给成员变量赋值,只能通过构造器。(main函数里的给成员变量赋值除外)
    2018-11-22 17:16:24
  • guly 回复 提问者 broodopq #2
    是的,祝学习愉快!
    2018-11-22 18:05:12
guly 2018-11-22 16:34:14

你好,

public:
int aa=5;
int bb=6;

应该改为:

public:
int aa;
int bb;

初始的长度应该为零,如果解决您的问题请采纳,祝学习愉快!

  • 提问者 broodopq #1
    成员变量为什么不能直接赋值呢?
    2018-11-22 16:38:33
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
C++零基础入门 热门编程语言 二级考试必备
  • 参与学习       529    人
  • 提交作业       110    份
  • 解答问题       593    个

无论您是零基础、还是想晋升,亦或是想转型,C++无疑都是最佳选择。本路径共分为基础语法、指针与引用、面向对象三大模块,为你开启入门C++编程的大门!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师