【发布时间】:2015-05-01 14:55:53
【问题描述】:
我真的对以下示例感到困惑:
#include <iostream>
class C {
public:
int a,b;
};
int main() {
C c{3,6};
std::cout<<c.a<<'\n';
std::cout<<c.b<<'\n';
return 0;
}
它工作正常并给出了预期的结果。但是如果我像下面这样修改上面的代码。
#include <iostream>
class C {
int a,b;
public:
int get_a(){
return a;
}
int get_b(){
return b;
}
};
int main(){
C c{3,6};
std::cout<<c.get_a()<<'\n';
std::cout<<c.get_b()<<'\n';
return 0;
}
在上面的程序编译中显示了多个错误。为什么在第一个程序中允许统一初始化但在第二个程序中不允许?我哪里错了?
【问题讨论】:
-
在第二种情况下,类成员变量是
private(隐式),不能直接访问。 -
一般来说:错误应该表明出了什么问题……显示它们通常很有用。但特别是 - 您将数据成员从公共更改为私有。
-
@Mat:如果我添加参数化 ctor,那么它可以正常工作。编译器抱怨没有匹配函数调用'C::C(
)'
标签: c++ initialization uniform-initialization