将传递的对象赋值给构造函数中的成员对象
assign passed object to member object in constructor
由于某些原因,我无法做到这一点。
Line::Line(const Pixel &aStart, const Pixel &aEnd){
start = aStart;
end = aEnd;
}
Line类
class Line : public Vertex{
public:
Line(const Pixel &start, const Pixel &end);
Pixel getStart();
Pixel getEnd();
private:
Pixel start;
Pixel end;
};
g++告诉我
错误:调用Pixel::Pixel()没有匹配的函数注:候选人为:
- Pixel::Pixel(int, int, int, int, int) - Pixel::Pixel(int, int) - Pixel::Pixel(const Pixel&)//not implemented by me, some sort of default constructor?
我认为实际上我使用最后一个构造函数,但有些不工作。如有任何帮助,不胜感激。
编辑:像素类:
class Pixel{
public:
Pixel(int x, int y);
Pixel(int red, int green, int blue, int x, int y);
void setRed(int red);
void setGreen(int green);
void setBlue(int blue);
void setColor(int r, int g, int b);
int getRed();
int getGreen();
int getBlue();
bool isChanged();
int getX();
int getY();
private:
int red;
int green;
int blue;
int x;
int y;
bool hasBeenChanged;
};
Pixel
、start
和end
类型的Line
成员将在Line
的构造函数运行之前默认构造,并将它们设置为作为参数传入的对象。似乎你的Pixel
类没有默认构造函数(因为给任何用户定义的构造函数将阻止编译器给你一个隐式的默认构造函数)。您需要使用构造函数成员初始化列表:
Line::Line(const Pixel &aStart, const Pixel &aEnd)
: start(aStart), end(aEnd)
{ }
这将分别用aStart
和aEnd
初始化start
和end
,绕过通常会发生的默认构造。
因为你声明了这个
Pixel::Pixel(int, int, int, int, int)
Pixel::Pixel(int, int)
编译器没有生成默认构造函数,或者构造函数存在,实参具有默认值。
Pixel start;
Pixel end;
需要一个默认构造函数。它找不到,因此编译器会报错。您当前的代码需要默认构造函数。
作为一个良好的实践,使用初始化列表,它不会要求参数默认构造。
Line::Line(const Pixel &aStart, const Pixel &aEnd):start(aStart), end(aEnd){}
相关文章:
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- c++构造函数成员初始化:传递参数
- 使用向量初始化参数化构造函数的对象数组
- C++定义构造函数使对象成为非 POD
- 通过向构造函数其他对象引用页面来创建对象
- 在没有复制构造函数的对象的成员函数中启动 std::thread
- C++将带有重载构造函数的对象添加到另一个对象
- 解释了构造函数成员初始化列表
- 在C++面向对象程序中,谁负责删除传递给构造函数的对象
- 关于默认构造函数,对象初始化/使用C++ OOP
- C++ 创建不带默认构造函数的对象数组
- 构造函数成员初始值设定项跨成员列出,安全吗?
- 对已删除其复制构造函数的对象的向量进行迭代 (C2280)
- 不带初始值设定项的构造函数列表,其中包含带有已删除构造函数的对象
- C++中构造函数的对象初始化出现问题
- 是否可以反序列化(从原始内存块)没有默认构造函数的对象?
- 没有默认构造函数的对象成员的 wig setter
- 复制构造函数错误:对象的类型限定符与成员函数不兼容
- 构造函数和对象的成员变量初始化
- 类成员是需要构造函数的对象.它需要一个函数来实例化