C++:如何在结构中定义类实例。类具有参数化构造函数

标签 c++ class constructor

<分区>

我有 C1 类:

class C1 : public Print {
public:
  C1(int p1, int p2, int p3);
};

我需要在结构 S1 中定义此类的一个实例:

struct S1{
   C1 c1;
};

但是编译器说:

注意:“S1::S1()”被隐式删除,因为默认定义的格式不正确:...

错误:没有匹配函数来调用 'C1::C1() ...

candidate: C1::C1(int, int, int) 注意:candidate 需要 3 个参数,0 个提供

candidate: constexpr C1::C1(const C1&) class C1 : public Print { candidate expects 1 argument, 0 provided

当我编译这段代码时:

Struct S1{
   C1 c1(1,1,1);
};

编译器说:

错误:在数字常量 C1 c1(1,1,1) 之前需要标识符;

错误:在数字常量之前需要“,”或“...”

我不需要调用C1类的构造函数,稍后再调用。我不能只删除 C1 代码中的这个构造函数,因为它是一个库。

当我定义全局变量时就可以了: C1 c1(1,1,1);

最佳答案

看起来编译器由于 C1 c1(1, 1, 1) 变量和返回 C1 的函数声明 c1 之间的歧义而提示>(一般来说,它没有办法告诉你你想要什么)。为避免这种情况,请使用 brace-init C1 c1{1, 1, 1}=:C1 c1 = C1(1, 1, 1).

如果您不想将其初始化为 C1(1, 1, 1) 您可以在 S1 构造函数中获取参数并将它们传递到 init-list :

struct S1{
  S1(int p1, int p2, int p3): c1(p1, p2, p3) {};
  C1 c1;
};

关于C++:如何在结构中定义类实例。类具有参数化构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58708917/

相关文章:

java - 在最后一个构造函数结束后调用方法

C# - 如何在同一行中初始化 List<string[]>

c++ - 我应该在我的程序中使用内联函数吗?

javascript - 如何停止类的事件而不刷新

arrays - 如何在 Swift 中实例化一个类(存储在数组中)?

c++ - 返回类指针 C++

Javascript 覆盖对象属性

c++ - float 破坏了我的代码

c++ - 如何为多个接口(interface)实现一个多态参数?

c++ - 使用 const 键类型引用调用 std::set of pointers 的 count 方法