5
4

2 回答 2

6

我不明白编译器在抱怨什么以及为什么我不能使用直接初始化?

因为那不是初始化。那是一个任务。赋值和(复制)初始化都使用了=符号,但不要让它愚弄你:这两件事根本不同。

初始化是在构造时为对象赋予值。当你的setName()成员函数被调用时,调用它的对象(以及它的数据成员)已经被构造了。如果你想在那里初始化它们,你就迟到了:你错过了火车。

另一方面,在构造函数的初始化列表中,您可以按如下方式初始化数据成员:

Course::Course(std::string name) : courseName(std::move(name)) { }
//                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
//                                 This would be initialization
于 2013-06-23T16:49:32.907 回答
2

您正试图将一个字符串的值分配给另一个已经初始化的字符串。语法是

std::string s1 = ....;
std::string s2 = ....;
s2 = s1; // OK, assignment

而你正在尝试相当于

s2(s1); // error, this is no way to assign s1 to s2

在这种情况下,这在语法上是无效的。您无法初始化已构建的对象。

于 2013-06-23T16:49:31.987 回答