首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用向量的emplace_back函数?

如何使用向量的emplace_back函数?
EN

Stack Overflow用户
提问于 2020-02-25 19:09:03
回答 1查看 123关注 0票数 2

编辑:把它改成只有一个问题,谢谢你的反馈!

我有这个向量

代码语言:javascript
复制
vector<Artifact> art;


art.emplace_back("Ipad", 349.99);
art.emplace_back("Gameboy", 29.99);
art.emplace_back("Xbox", 229.99);
art.emplace_back("SamsungTV", 559.99);
art.emplace_back("AirCon", 319.99);

这些东西给了我一个错误

代码语言:javascript
复制
C2661   'Artifact::Artifact': no overloaded function takes 2 arguments

我不明白它为什么会给我这个错误,我有一个带有7个参数的构造函数,但是我只需要名称和价格来完成我想要做的事情。

编辑:这是最小可复制的例子:

代码语言:javascript
复制
class Item {
public:

virtual double GetTotalPrice();

};

//Class artifact now inherits Item
class Artifact : public Item
{
private:

string GUID;
string Name;
string Description;
string Category;
double Price;
double Discount;
enum DiscountType { Amount, Percentage };
int Quantity;

public:
//Constructor
Artifact(string GUID, string Name, string Description, string Category, double Price, double Discount,  int Quantity)
{
    this->GUID = GUID;
    this->Name = Name;
    this->Description = Description;
    this->Category = Category;
    this->Price = Price;
    this->Discount = Discount;
    this->Quantity = Quantity;

}
//default constructor
Artifact();

void set_name(const string& name)
{
    Name = name;
}

void set_price(double price)
{
    if (Price > 0)
    {
        Price = price;
    }

    else cout << "Price cannot be negative!";


};

int main()
{


vector<Artifact> art;

art.emplace_back("Ipad", 349.99);
art.emplace_back("Gameboy", 29.99);
art.emplace_back("Xbox", 229.99);
art.emplace_back("SamsungTV", 559.99);
art.emplace_back("AirCon", 319.99);



return 0;

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-25 19:31:24

基本上,您所得到的错误是因为您有两个构造函数(一个默认参数为0参数,另一个为7参数版本),但您只将两个值传递给emplace_back。传递给emplace_back的值被转发给Artifact的构造函数。

有两种可能的方法来解决这个问题。首先,创建另一个构造函数,它只接受两个值,如下所示:

代码语言:javascript
复制
Artifact(string Name, double Price) : Artifact("", Name, "", "", Price, 0., 0 ) {}

或者,您可以修改现有的7参数构造函数以使用默认值。

代码语言:javascript
复制
// note the reordering of parameters here
Artifact(string name, double Price, string GUID= "", 
         string Description = "", string Category = "", 
         double Discount = 0.0, int Quantity = 0) { … }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60401618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档