c++ - 未找到默认构造函数

标签 c++

我不想使用默认的构造函数,所以我实现了我的

class A
{
  public:
     A(int&i);
     A& operator=(const A& a);
     A(const A&a);
};

但是在B类

class B
{
   A a;
   public:
     B(const A&a){this->a=a;}
}

然后错误:

no appropriate default constructor of A found.

最佳答案

使用构造函数初始化列表,因此成员a是通过复制构造函数初始化的:

B(const A&a):a(a){}

如果您不使用构造函数初始化列表,则编译器首先尝试初始化 A a;,并且仅在将其他 a 分配给它之后。但是,第一次初始化失败,因为没有提供默认构造函数。一般来说,建议在初始化成员时始终使用构造函数初始化列表。这样就不用调用一个构造函数+一个赋值运算符,而只调用复制构造函数。

我建议将成员的名称从 a 更改为例如_a,这样代码就变得更加清晰了。

关于c++ - 未找到默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30090718/

相关文章:

c++ - 在派生类上调用虚函数时出现段错误

c++ - 如何从枚举类型中获取 std::string?

c++ - MPI_Send 发送数组地址还是数组内容

c++ - C++ 枚举中的数组

c++ - 重载父类(super class)函数c++后从父类(super class)获取函数

c++ - 在子类中填充静态类成员

c++ - 在 OpenGL 中制作一个简单的形状移动(形状在数据结构中)

c++ - 如何显示 createprocess 函数隐藏的控制台应用程序窗口

c++ - 编写将二进制转换为文本的程序 c++6

c++ - 用模板替换标量失败