基本上,我对c ++很新,我想知道为什么当我创建一个对象时,它不会让我以正常的方式初始化它。例如 'int example = 10;'但是当我尝试像下面的代码中那样初始化这个问题时,会出现一些关于某些转换的问题:'没有合适的构造函数可以从“const char [7]”转换为“binary”'。
#include <iostream>
using namespace std;
class binary
{
public:
string value;
};
int main()
{
binary first = "101010";
return 0;
}
答案 0 :(得分:6)
无论
binary first = "101010";
,也不
binary first = std::string("101010");
将起作用,因为该类没有构造函数来接受这样的参数。
您可以使用以下任何一项:
binary first = {"101010"};
binary first = {std::string("101010")};
binary first{"101010"};
binary first{std::string("101010")};
答案 1 :(得分:0)
您可以像在其他答案中一样进行字段初始化,但如果您正在使用某个类,我建议您在类中更多地控制它的创建方式:
如果值应该初始化:
using std::string; //(not using namespace std;)
class binary
{
public:
string value;
explicit binary(string initialValue) :value(std::move(initialValue)) {}
private:
binary() {} //optionally allow no initialization within class (see comments below)
};
int main()
{
binary second("101010");
return 0;
}
空私有构造函数允许类本身执行复杂的&#34;初始化&#34;实际构造函数之外的实例。这种初始化的一个示例可能是读取xml文件并从结果中填充类(也可以由类的客户端或类中的Init()
函数来完成。)您可以将其删除如果不需要的话。如果可以从课外进行初始化,则可以将其移至public:
答案 2 :(得分:-2)
当你这样做时
binary first
它创建一个名为“first”的对象。你需要在“first”中初始化“value”,如下所示:
binary first;
first.value = "101010";
如果我没记错的话,C ++会隐式将你的char [7]转换为字符串