我收到编译错误"cannot convert.."
,`“没有构造函数的实例..”。我做错了我。我试图更改对象的初始化方式,但没有帮助。希望更好地理解这一点。
错误C2440'':无法从'const char转换[11]'到'Course'
错误C2512'LectureTitle :: LectureTitle':没有适当的默认值可用的构造函数
错误(活动)E0289没有构造函数“ Course :: Course”的实例匹配参数列表
错误(激活)E0312没有合适的用户定义的“周”转换到“ LectureTitle”存在
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Specialization {
string data;
explicit Specialization(string& new_value) {
data = new_value;
}
};
struct Course {
string data;
explicit Course(string& new_value) {
data = new_value;
}
};
struct Week {
string data;
explicit Week(string& new_value) {
data = new_value;
}
};
struct LectureTitle {
string specialization;
string course;
string week;
LectureTitle(Specialization& new_value1, Course& new_value2, Week new_value3) {
specialization = new_value1.data;
course = new_value2.data;
week = new_value3.data;
}
};
int main() {
LectureTitle title (
Specialization("C++"),
Course("White belt"),
Week("4th")
);
}
LectureTitle title ( Specialization("C++"), Course("White belt"), Week("4th") );
在这里,您尝试创建具有LectureTitle
,Specialization
和Course
的临时值(rvalues)的Week
实例。它们是临时的,因为它们没有命名为变量,即在这段代码之前未定义为变量。
但是,所有构造函数都采用命名变量引用(lvalues)。这就是为什么您会收到编译器错误的原因。要更正这些错误,您可以使构造函数接受const值引用,如下所示:
explicit Specialization(const std::string& new_value) {
data = new_value;
}
explicit Course(const std::string& new_value) {
data = new_value;
}
explicit Week(const std::string& new_value) {
data = new_value;
}
LectureTitle(const Specialization& new_value1, const Course& new_value2, const Week new_value3) {
specialization = new_value1.data;
course = new_value2.data;
week = new_value3.data;
}
常量左值引用可以绑定到右值-即延长临时项的生存期。