簡體   English   中英

C ++將參數類型解釋為構造函數

[英]C++ Interprets parameter type as Constructor

社區,

我完全不熟悉c ++,所以希望您能對我有所幫助。 我已經用Java編寫過,並且有很多相似之處,但是我無法理解這個錯誤。 看來,在我的PrimitiveBase.cpp的構造函數中,編譯器將Type 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

這里您可能需要的代碼: 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;

}

顏色.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

我真的不明白,因為我在過去的兩年中都是用Java編寫的,在最近的練習中它也可以用c ++編寫。

如果您能幫助我,將非常高興:)

您有一個Colour數據成員,並且沒有在構造函數中對其進行初始化 因此,嘗試調用其默認構造函數。 沒有默認的構造函數,因此會出現編譯錯誤。 要初始化它,請使用構造函數初始化列表:

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

}

一旦進入構造函數的主體,所有實例都將被隱式或顯式初始化。 您只能修改它們。

您需要使用初始化程序列表。 否則,在進入構造函數主體之前,將默認構造顏色。

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

我要說的是lac Colour默認構造函數,因為您已經提供了參數化的構造函數,因此,您需要定義一個沒有參數的默認構造函數或正確初始化PrimitiveBase的對象:

就像是:

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

要么:

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

另一方面,總是最好在構造函數的初始化列表中初始化類的對象,而不是在構造函數的主體中進行賦值: 成員賦值列表超過賦值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM