我有这个向量
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);
这些项目给我一个错误
C2661 'Artifact::Artifact': no overloaded function takes 2 arguments
我不明白为什么会给我这个错误,我有一个带有7个参数的构造函数,但是我只需要Name和Price就可以了。编辑:这是最小的可复制示例:
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; }
emplace_back
。传递给emplace_back
的值将转发到Artifact
的构造函数。 有两种可能的解决方法。首先,创建另一个仅接受两个值的构造函数,如下所示:
Artifact(string Name, double Price) : Artifact("", Name, "", "", Price, 0., 0 ) {}
或者,您可以修改现有的7参数构造函数以使用默认值
// note the reordering of parameters here Artifact(string name, double Price, string GUID= "", string Description = "", string Category = "", double Discount = 0.0, int Quantity = 0) { … }