C++ 在HardwareStore类中未找到匹配的构造函数(C+;+;)

C++ 在HardwareStore类中未找到匹配的构造函数(C+;+;),c++,constructor,matching,C++,Constructor,Matching,我一直在开发一个硬件商店应用程序,其中有一个HardwareRecordclass存储商店中每个对象的信息(例如:螺母、螺栓、螺钉等) 信息存储在一个“.dat”文件中,但现在这并不重要 以下是我对本课程的声明: // Definition of HardwareRecord class #ifndef __Initialize_Hardware_Store_File__HardwareRecord__ #define __Initialize_Hardware_Store_File__Ha

我一直在开发一个硬件商店应用程序,其中有一个HardwareRecordclass存储商店中每个对象的信息(例如:螺母、螺栓、螺钉等)

信息存储在一个“.dat”文件中,但现在这并不重要

以下是我对本课程的声明:

//  Definition of HardwareRecord class

#ifndef __Initialize_Hardware_Store_File__HardwareRecord__
#define __Initialize_Hardware_Store_File__HardwareRecord__

#include <iostream>

class HardwareRecord
{


public:

HardwareRecord(const int& account=0,const std::string& name="",const std::string& description="",const double& price=0.0); //constructor
HardwareRecord operator=(HardwareRecord&);

//'set' and 'get' functions
void setAccountNumber(int);
int getAccountNumber() const;

void setName(std::string);
std::string getName() const;

void setPrice(double);
double getPrice() const;

void setDescription(std::string);
std::string getDescription() const;

void wipeRecord(); //set everything to blank


private:
int myAccountNumber;
std::string myName;
std::string myDescription;
double myPrice;
};

#endif /* defined(__Initialize_Hardware_Store_File__HardwareRecord__) */
应该初始化没有任何问题


发生了什么事?如何修复此问题?

您正在尝试使用默认构造函数

HardwareRecord temp;
但是您已经声明了一个接受参数的构造函数,以及一个赋值运算符。声明采用参数的构造函数的行为意味着编译器不会为您生成默认构造函数。因此,如果您想要一个,您必须自己声明一个或使用您创建的构造函数

编辑

我上面的回答不正确,因为OP为所有指定参数提供了默认值

在我指定的情况下,编译器将声明如下:

 error: no matching function for call to ‘Foo::Foo()’
但如果指定了默认值,它将编译

小型测试:

--福安

--foo.cpp


HardwareRecord类应具有默认构造函数,例如:

class HardwareRecord { public: HardwareRecord() : myAccountNumber(0), myName(""), myDescription(""), myPrice(0.0f) {} ... }; 类硬件记录{ 公众: 硬件记录():myAccountNumber(0), 我的名字(“”), 我的描述(“”), myPrice(0.0f){} ... };
您当前使用默认参数值的构造函数似乎不被视为“默认构造函数”。

我认为这就是问题所在。在构造函数中,您使用了
std::string&
,但是,您的代码中从不包含

除了一些其他错误外,使用G++编译还提供:

prog.cpp:46:57:错误:“字符串”未命名类型


这可能会使默认构造函数无效。

@Chnossos:有一个构造函数,其中所有参数都有默认值。同样的事情。我不知道你在代码中报告的错误。哪个编译器和版本?编译器似乎不接受代码,尽管它应该接受。引用Fred Larson的话:“有一个构造函数,所有参数都有默认值。同样的事情”@deviantfan为什么要否决?你的报价有什么意义。我提供的答案是正确的。Gcc也说你的答案是错误的,等我引用标准。。。顺便说一句,你不应该假设谁投了反对票。N3242 12.1.5:类X的默认构造函数是类X的构造函数,可以在没有参数的情况下调用。“可以称为没有”,而不是“没有争论”。不,这不是我。继续问一个国防部,如果你真的想。但是这是错误的,如果这是问题所在,那么
std::string myName也应该抛出一个错误。尽管不能保证第一条错误消息之后的任何行为都是有效的。因此,到目前为止,这仍然是最有可能的答案:)
HardwareRecord temp;
HardwareRecord temp;
 error: no matching function for call to ‘Foo::Foo()’
class Foo
{
  private:
    int _i;

  public:
    Foo( int i );
};
 #include "foo.h"

 Foo::Foo( int i )
 : _i( i )
 {
 }

 int main()
 {
   Foo foo;

   return 0;
 }
class HardwareRecord { public: HardwareRecord() : myAccountNumber(0), myName(""), myDescription(""), myPrice(0.0f) {} ... };