C++ 类中结构体成员无法赋值

class A
{
public:
struct a
{
int Num;
};
a test;
test.Num = 1;//错误提示:此声明没有存储类或类型说明符

}
在类A中无法直接对结构体a中的成员Num直接赋值,提示错误见上。如果是类的成员或声明函数中,就是对的。为什么?
struct a
{
int Num;
};
a test;
test.Num = 1;

这几行代码我放在函数中间(main函数或者是类的成员函数)就是对的,没有报错。不明白的为什么直接在类中赋值就是错的。有什么讲究么?

这本身就是语法问题,C++11中支持对类成员直接用= 初始化
你如果要对test.num初始化 就应该写在struct a的构造函数中,而不是这样的写法追答

说过了 不能在类中对“成员的成员直接等号赋值“
这是语法问题,C++不允许这样

你想赋值,就写在类的构造函数中

追问

但是如果结构体赋值的代码是写在类的成员函数中,上面的语法就提示是对的。这又是为什么呢?有点较真,请见谅

追答

那当然可以 你现在类的函数是在运行时候才执行的,自然可以赋值

你在类中用等号赋值 相当于给这个类的成员赋予了初始值,属于初始化范畴。
你定义了这个类,还没使用这个类,就要让这个类的成员变为一个值,这就是初始化。

在类中直接等于是为了方便程序员,不用写类的构造函数,以前没有C++11的时候,你要对成员变量赋初值,必须要写构造函数。

追问

感谢。学习了!

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网