错误:在 C++ 中从“const char [5]”转换为非标量类型

2024-05-07

public:
    string str;

    Test(string& str){
        this->str=str;
        cout<<"constructor"<<endl;
    }
 

};

int main() {
    Test t="test";
    return 0;
}

在此代码中我收到错误"..\src\Test.cpp:30:9: error: conversion from 'const char [5]' to non-scalar type 'Test' requested "?

那为什么下面的代码就可以了呢?

#include <iostream>
using namespace std;

class Test{

public:
    string str;

    Test(string str){
        this->str=str;
        cout<<"constructor"<<endl;
    }

    Test(const Test &test){
        cout<<"copy constructor"<<endl;
        this->str=test.str;
    }

};

int main() {
    Test t=Test("test");
    return 0;
}

Test t="test";

这试图:

  • 转换字符串文字(这是一个字符数组,char[5]) 变成临时的string
  • 转换临时的string to Test

失败的原因有两个:

  • 隐式转换序列不能涉及多个用户定义的转换。这里需要两个。
  • 临时变量不能绑定到非常量变量lvalue参考,这是你的转换构造函数Test(string&) wants.

您的第二个示例通过以下方式解决了这些问题:

  • 进行转换string to Test明确的,Test(...)。现在只有一种隐式转换,从char[5] to string。请注意,这是一种相当冗长的初始化方式;Test t("test")也会做同样的事情。
  • 声明转换构造函数采用string按价值,而不是参考。常量引用,const string&,也可以工作,就像const char*.

这两项更改都是必要的,因为每项更改都只解决了两个问题之一。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误:在 C++ 中从“const char [5]”转换为非标量类型 的相关文章

随机推荐