C++构造函数参数
C++ constructor parameters
所以我今天在为一个简单的坐标系做了长时间的休息后写了一些C++,我想我想要一个构造函数接受 2 个值,这样我就可以写出类似"坐标 c = 新坐标(1,2(;"之类的东西
。struct Coordinates {
int x;
int y;
Coordinates(int a, int b) {
x = a;
y = b;
}
};
当在Cygwin中编译时,我得到:
$ g++ -o 冒险冒险.cpp 冒险.cpp:36:错误:调用"坐标::坐标(("没有匹配函数 冒险.cpp:22:注意:候选人是:坐标::坐标(常量坐标&( 冒险.cpp:26: 注:坐标::坐标(int, int(
不确定这里出了什么问题,我找不到有关C++结构构造函数的太多信息。有什么想法吗?
在代码的第 36 行(您没有显示(中,您正在创建此类的对象,但您没有向构造函数传递任何参数。唯一有效的构造函数是接受两个整数的构造函数或默认复制构造函数。添加不带参数的构造函数,或更改代码以将a
和b
传递给构造函数。
通过编写显式构造函数,您禁用了默认构造函数的自动创建,该构造函数在定义没有构造函数参数的对象时使用,如 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;
在类定义中。
相关文章:
- C++:使用运算符 = 调用多参数构造函数
- 通过零参数构造函数创建的 glm::mat4 应该包含哪些值?
- 好奇的混合与可变参数构造函数
- 具有默认值的单个参数构造函数是否与默认构造函数相同?
- 为什么我们需要创建一个单参数构造函数来使用临时的无名称对象
- 在可变参数构造函数中初始化常量数组
- C++ 显式多参数构造函数歧义
- 零一参数构造函数
- 可变参数构造函数中的 SFINAE
- 当没有显式关键字与单参数构造函数一起使用时,编译器可以发出警告
- 可变参数类模板和可变参数构造函数
- 确保模板参数类型与其可变参数构造函数的类型匹配
- C++默认参数构造函数与内联初始化优先级
- 如何在 c++ 中将包含复制构造函数的类的参数构造函数称为私有?
- 自动存储中没有无参数构造函数的类对象和异常
- 警告:用两个参数构造函数返回对象时,表达结果未使用
- 如何在C++中调用无参数构造函数
- 在 c++ 中具有多个参数构造函数的模板类存在问题
- 可变参数构造函数优先于用户提供的移动构造函数,除非默认
- 如何从可变参数构造函数参数构造任何对象?