Line::Line(const Pixel &aStart, const Pixel &aEnd){
start = aStart;
end = aEnd;
}
Line class:
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;
};
答案 0 :(得分:4)
Line
,Pixel
和start
类型的end
成员将在Line
的构造函数运行并将其设置为对象之前默认构造作为参数传递。您的Pixel
类似乎没有默认构造函数(因为给出任何用户定义的构造函数都会阻止编译器为您提供隐式默认构造函数)。您需要使用构造函数成员初始化列表:
Line::Line(const Pixel &aStart, const Pixel &aEnd)
: start(aStart), end(aEnd)
{ }
分别使用start
和end
初始化aStart
和aEnd
,绕过通常会发生的默认构造。
答案 1 :(得分:1)
因为你声明了这个
Pixel::Pixel(int, int, int, int, int)
Pixel::Pixel(int, int)
编译器不会生成默认的constrcutor,或者存在具有默认值的参数的构造函数。
Pixel start;
Pixel end;
这些需要默认构造函数。它找不到一个,因此编译器抱怨。您当前的代码需要默认的构造函数。
作为一种好的做法,使用初始化列表,它不会要求参数默认构建。
Line::Line(const Pixel &aStart, const Pixel &aEnd):start(aStart), end(aEnd){}