Я действительно путаться в следующих примерах:уточнение инициализации в C++
#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;
}
В приведенном выше компиляторе программы показаны многочисленные ошибки. Почему единая инициализация разрешена в первой программе, но не во второй? Где я ошибаюсь?
Во втором случае переменные-члены класса являются «частными» (неявно) и не могут быть доступны для прямого инициализации. –
В общем: ошибки должны указывать, что не так ... часто бывает полезно их показать. Но в частности - вы изменили данные с публичного на частный. – Useless
@Mat: Если я добавлю параметризованный ctor, тогда он отлично работает. Компилятор жалуется, что не существует подходящей функции для вызова «C :: C (<список с иничиатором с прикрепленным скобками>)» – Destructor