我不明白为什么这不会让我像普通的对象/实例一样初始化

时间:2018-04-19 19:46:58

标签: c++

基本上,我对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;
}

3 个答案:

答案 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]转换为字符串

相关问题