繁体   English   中英

C ++构造函数参数

[英]C++ constructor parameters

所以我在一个简单的坐标系统长时间休息之后今天写了一些C ++,我想我想要一个构造函数来接受2个值,这样我就可以写出像“Coordinates c = new Coordinates(1,2);”这样的东西。

struct Coordinates {
   int x;
   int y;

   Coordinates(int a, int b) {
      x = a;
      y = b;
   }
};

在Cygwin中编译时,我得到:

$ g ++ -o adventure adventure.cpp adventure.cpp:36:错误:没有匹配函数来调用`Coordinates :: Coordinates()'adventure.cpp:22:注意:候选者是:Coordinates :: Coordinates(const Coordinates&)冒险.cpp:26:注意:Coordinates :: Coordinates(int,int)

不知道这里出了什么问题,我在C ++ struct构造函数上找不到太多信息。 有任何想法吗?

在代码的第36行(您没有显示),您正在创建此类的对象,但您没有将任何参数传递给构造函数。 唯一有效的构造函数是带有两个int的构造函数,或者是默认的复制构造函数。 添加一个没有参数的构造函数,或者更改代码以将ab传递给构造函数。

通过编写显式构造函数,您禁用了自动创建默认构造函数,该构造函数在定义没有构造函数参数的对象时使用,如在Coordinates coords; 你必须像这样明确地提供它:

struct Coordinates {
  int x;
  int y;

  Coordinates(int a, int b) {
    x = a;
    y = b;
  }

  Coordinates(): x(0), y(0) {}
};

请注意,我在默认构造函数中初始化了成员变量; 它不是强制性的,但它是一个好主意,因为否则即使在使用编译器生成的结构进行默认初始化的情况下它们也将是未定义的。

另请注意,我使用了成员初始值设定项( : x(0), y(0)部分)而不是构造函数体中的赋值。 这是好的样式,对于类对象通常会提供更好的性能,并且在某些情况下是初始化成员的唯一方法(例如,如果它是const类型或没有默认构造函数)。

请注意,在C ++ 11中,您可以告诉编译器生成相同的默认构造函数,它将在没有其他构造函数的情况下生成,只需编写

Coordinates() = default;

在类定义中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM