Dre*_*mer 5 c++ string constructor compiler-errors initialization
我是C++的新手.我搜索了很多次,但仍然无法得到答案.我正在写一个名为Course的课程来描述学生在学校学习的课程.Course类有3个文件:
protected:
string courseName;
int courseNum;
float score;
Run Code Online (Sandbox Code Playgroud)
我有一个公共方法"setName"来设置课程名称:
Course &setName(string name)
{
this->courseName(name);
return (*this);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试编译时,编译器抱怨: C++错误:无法调用'(std :: string {aka std :: basic_string})(std :: string&)' 我也尝试将代码修改为Course&setName(string&name)...编译器一直抱怨同样的错误.
但是,如果我将代码更改为:
Course &setName(string name)
{
this->courseName = name;
return (*this);
}
Run Code Online (Sandbox Code Playgroud)
然后它运作良好.我无法理解编译器在抱怨什么以及为什么我不能使用直接初始化?
我无法理解编译器在抱怨什么以及为什么我不能使用直接初始化?
因为那不是初始化.这是一项任务.赋值和(复制)初始化都使用了=符号,但不要让那个愚弄你:这两件事情根本不同.
初始化是在构造时为对象赋予值的原因.当你的setName()成员函数被调用,已建在它被调用的对象(以及它的数据成员).如果你想在那里初始化它们,你迟到了:你错过了火车.
另一方面,在构造函数的初始化列表中,您可以按如下方式初始化数据成员:
Course::Course(std::string name) : courseName(std::move(name)) { }
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^
// This would be initialization
Run Code Online (Sandbox Code Playgroud)