C++ C++;将参数类型解释为构造函数

C++ C++;将参数类型解释为构造函数,c++,types,parameters,constructor,compiler-errors,C++,Types,Parameters,Constructor,Compiler Errors,社区 我对C++完全陌生了,所以希望你能帮助我。 我已经用Java写过了,有很多相似之处,但我不能理解这个错误。 看起来,在PrimitiveBase.cpp的构造函数中,编译器将类型color解释为没有参数的构造函数,而我没有参数。 当我定义第二个没有参数和功能的构造函数时,错误就消失了。 但这与我对函数的参数消去的理解不符 她的错误是: /home/christian/Documents/EBV/ebv-S03-G01/src/Graphics2D/PrimitiveBase.cpp: In

社区

我对C++完全陌生了,所以希望你能帮助我。 我已经用Java写过了,有很多相似之处,但我不能理解这个错误。 看起来,在PrimitiveBase.cpp的构造函数中,编译器将类型color解释为没有参数的构造函数,而我没有参数。 当我定义第二个没有参数和功能的构造函数时,错误就消失了。 但这与我对函数的参数消去的理解不符

她的错误是:

/home/christian/Documents/EBV/ebv-S03-G01/src/Graphics2D/PrimitiveBase.cpp: In constructor 'PrimitiveBase::PrimitiveBase(std::vector<Coordinate>, Colour)':

/home/christian/Documents/EBV/ebv-S03-G01/src/Graphics2D/PrimitiveBase.cpp:5:74: error: no matching function for call to 'Colour::Colour()'

/home/christian/Documents/EBV/ebv-S03-G01/src/Graphics2D/PrimitiveBase.cpp:5:74: note: candidates are:

/home/christian/Documents/EBV/ebv-S03-G01/src/Graphics2D/Colour.hh:9:2: note: Colour::Colour(int, int, int, std::string)

/home/christian/Documents/EBV/ebv-S03-G01/src/Graphics2D/Colour.hh:9:2: note:   candidate expects 4 arguments, 0 provided

/home/christian/Documents/EBV/ebv-S03-G01/src/Graphics2D/Colour.hh:6:7: note: Colour::Colour(const Colour&)

/home/christian/Documents/EBV/ebv-S03-G01/src/Graphics2D/Colour.hh:6:7: note:   candidate expects 1 argument, 0 provided
/home/christian/Documents/EBV/EBV-S03-G01/src/Graphics2D/PrimitiveBase.cpp:在构造函数“PrimitiveBase::PrimitiveBase(std::vector,color)”中:
/home/christian/Documents/EBV/EBV-S03-G01/src/Graphics2D/PrimitiveBase.cpp:5:74:错误:调用“color::color()”时没有匹配函数
/home/christian/Documents/EBV/EBV-S03-G01/src/Graphics2D/PrimitiveBase.cpp:5:74:注:候选人包括:
/home/christian/Documents/EBV/EBV-S03-G01/src/Graphics2D/color.hh:9:2:note:color::color(int,int,int,std::string)
/home/christian/Documents/EBV/EBV-S03-G01/src/Graphics2D/color.hh:9:2:注意:候选者需要4个参数,提供0个
/home/christian/Documents/EBV/EBV-S03-G01/src/Graphics2D/color.hh:6:7:注:color::color(const color&)
/home/christian/Documents/EBV/EBV-S03-G01/src/Graphics2D/color.hh:6:7:注意:候选者需要1个参数,提供0
下面是您可能需要的代码: PrimitiveBase.cpp

#include <Graphics2D/PrimitiveBase.hh>
#include <Graphics2D/Coordinate.hh>
#include <Graphics2D/Colour.hh>

PrimitiveBase::PrimitiveBase(std::vector<Coordinate> coord, Colour colour) {    //Here the error happens
this->coord=coord;
this->colour=colour;
}

Colour PrimitiveBase::GetColour() {

return colour;

}

std::vector<Coordinate> PrimitiveBase::GetCoordinates() {

return coord;

}

void PrimitiveBase::SetColour(int red, int green, int blue) {

colour.SetColours(red,green,blue);

}

void PrimitiveBase::SetCoordinates(std::vector<Coordinate> newCoord) {

coord = newCoord;

}
#包括
#包括
#包括
PrimitiveBase::PrimitiveBase(std::vector coord,color-color){//这里发生错误
这->协调=协调;
这个->颜色=颜色;
}
颜色基元::GetColor(){
返色;
}
std::vector PrimitiveBase::GetCoordinates(){
返回坐标;
}
void PrimitiveBase::setcolor(整数红色、整数绿色、整数蓝色){
颜色。设置颜色(红色、绿色、蓝色);
}
void PrimitiveBase::SetCoordinates(std::vector newCoord){
coord=newCoord;
}
颜色。hh

#ifndef COLOUR_HH_
#define COLOUR_HH_

#include <string>

 class Colour {

public:
Colour(int red, int green, int blue, std::string name);
//Colour(){};   Constructo I seem to need
//~Colour();
void SetColours(int red, int green, int blue);
static Colour black();
static Colour red();
static Colour green();
static Colour blue();

private:
std::string name;
unsigned char rgb[3];

};

#endif
#如果没有颜色#_
#定义颜色_
#包括
班级颜色{
公众:
颜色(整数红色、整数绿色、整数蓝色、标准::字符串名称);
//颜色(){};我似乎需要
//~color();
无效设置颜色(内部红色、内部绿色、内部蓝色);
静态颜色黑色();
静态颜色红色();
静态颜色绿色();
静态颜色蓝色();
私人:
std::字符串名;
无符号字符rgb[3];
};
#恩迪夫
我真的不明白,因为我在java中做了2年,在最后的练习中,C++也有。< /P>
如果您能帮助我,我将非常高兴:)

您有一个
color
数据成员,并且您没有在构造函数中初始化它。因此,尝试调用其默认构造函数。没有默认构造函数,因此会出现编译错误。要初始化它,请使用构造函数初始化列表:

PrimitiveBase::PrimitiveBase(std::vector<Coordinate> coord, Colour colour) 
  : coord(coord), colour(colour) // HERE
{

}
PrimitiveBase::PrimitiveBase(标准::向量坐标,彩色)
:coord(coord),color(color)//这里
{
}

一旦进入构造函数的主体,所有实例都已隐式或显式初始化。您只能修改它们。

您有一个
color
数据成员,并且您没有在构造函数中初始化它。因此,尝试调用其默认构造函数。没有默认构造函数,因此会出现编译错误。要初始化它,请使用构造函数初始化列表:

PrimitiveBase::PrimitiveBase(std::vector<Coordinate> coord, Colour colour) 
  : coord(coord), colour(colour) // HERE
{

}
PrimitiveBase::PrimitiveBase(标准::向量坐标,彩色)
:coord(coord),color(color)//这里
{
}

一旦进入构造函数的主体,所有实例都已隐式或显式初始化。您只能修改它们。

您需要使用初始化列表。否则,在进入构造函数主体之前,颜色将是默认构造的

PrimitiveBase::PrimitiveBase(std::vector<Coordinate> coord, Colour colour) :
coord(coord),
colour(colour)
{
}
PrimitiveBase::PrimitiveBase(标准::向量坐标,颜色):
coord(coord),
颜色(颜色)
{
}

您需要使用初始化列表。否则,在进入构造函数主体之前,颜色将是默认构造的

PrimitiveBase::PrimitiveBase(std::vector<Coordinate> coord, Colour colour) :
coord(coord),
colour(colour)
{
}
PrimitiveBase::PrimitiveBase(标准::向量坐标,颜色):
coord(coord),
颜色(颜色)
{
}

我想说您没有默认构造函数,因为您已经提供了一个参数化构造函数,所以您需要定义一个没有参数的默认构造函数,或者正确初始化
PrimitiveBase
的对象:

比如:

Colour() 
    : name("") 
    , rgb()
{}
或:

PrimitiveBase::PrimitiveBase(标准::向量坐标,彩色)
:坐标(坐标)
,颜色(颜色)
{}

另一方面,最好在构造函数的初始化列表中初始化类的对象,而不是在构造函数的主体中赋值:

我想说您使用了默认构造函数,因为您已经提供了一个参数化构造函数,您需要定义一个没有参数的默认值,或者正确初始化
PrimitiveBase
的对象:

比如:

Colour() 
    : name("") 
    , rgb()
{}
或:

PrimitiveBase::PrimitiveBase(标准::向量坐标,彩色)
:坐标(坐标)
,颜色(颜色)
{}

另一方面,最好在构造函数的初始化列表中初始化类的对象,而不是在构造函数的主体中赋值:

您需要在构造函数的参数列表之后使用mem初始值设定项列表来构造类的任何数据成员。否则,它们将被默认构造:
PrimitiveBase::PrimitiveBase(std::vector coord,color-color):coord(coord),color(color){}
(即使参数和数据成员的名称相同,这也有效;但我更愿意给它们不同的名称)您能给我们看一下PrimitiveBase的hh吗?DyP-wow,谢谢。这是一个非常快速的答案,而且很有帮助。您需要在构造函数的参数列表之后使用mem初始值设定项列表来构造