如何解决“无法转换”?

问题描述 投票:-2回答:1

我收到编译错误"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")
        );

    }
c++ class struct explicit
1个回答
0
投票
LectureTitle title (
        Specialization("C++"),
        Course("White belt"),
        Week("4th")
    );

在这里,您尝试创建具有LectureTitleSpecializationCourse的临时值(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;
}

常量左值引用可以绑定到右值-即延长临时项的生存期。

© www.soinside.com 2019 - 2024. All rights reserved.