所以基本上我有一个错误对我来说毫无意义。我已经尝试了一切,但似乎没有任何工作,所以我认为你们可以帮助我。顺便提一下,这是我在这个网站上的第一篇文章。
我正在开发一个程序,涉及一个名为“household.cc,h”的类和一个测试程序。
这是Household.h(有问题的代码)
class Household{
public:
// Default constructor
Household(std::string nme, std::string adrs, int peeps, int ncome);
Household();
Household(std::string& nme, std::string& adrs, int& peeps, int& ncome);
这是我的Household.cc文件
// constructors
Household::Household(std::string nme, std::string adrs, int peeps, int ncome){
name = nme;
address = adrs;
numpeople = peeps;
income = ncome;
}
Household::Household(std::string& nme, std::string& adrs, int& peeps, int& ncome){
name =nme;
address = adrs;
numpeople=peeps;
income=ncome;
}
Household::Household(){
name = "";
address = "";
numpeople = 0;
income =0;
}
并且有问题的测试类代码是:
Household temp;
string n;
int i;
cout<< "Please enter the name, press enter, then the income of the house\n";
getline(cin, n);
cin >> i;
myWard.removeHouse(temp(n, n, i, i));
break;
错误消息是
Error: no match for call to '(Household) (std:string&, std::string&, int&, int&)'
我真的不明白为什么会发生这种情况,因为我的Household构造函数确实拥有所有这些参数。我可能会遗漏一些明显的东西但对我来说并不那么明显。这是我第一次使用c ++。
编辑:removeHouse和myWard在这个问题上无关紧要,但我添加了临时代码。问题是代码
temp(n,n,i,i)
那是错误的地方。
提前致谢!
答案 0 :(得分:1)
您使用默认构造函数 temp 对象初始化,然后稍后您尝试使用其他构造函数<重新初始化它/ strong> ..这就是问题。
Household temp; <-- initialized with DEFAULT constructor
string n;
int i;
cout<< "Please enter the name, press enter, then the income of the house\n";
getline(cin, n);
cin >> i;
myWard.removeHouse(temp(n, n, i, i)); <-- RE-initialize?? Bad idea..
break;
使用您想要的构造函数初始化对象(我认为是4参数),然后使用该对象。
另外:gcc可能正在被使用,它会警告你,使用这组参数,没有可用的解决方案。
这样的事可能有用:
string n;
int i;
// do initialize n and i to something meaningful here
Household temp(n, n, i, i);
cout<< "Please enter the name, press enter, then the income of the house\n";
getline(cin, n);
cin >> i;
myWard.removeHouse(temp);
break;
我对其他功能以及程序的行为一无所知。
答案 1 :(得分:1)
表达式temp(n, n, i, i)
不会“重新调用”构造函数,这就是您尝试执行的操作。相反,该表达式尝试在operator()
对象上调用函数应用程序运算符temp
。你没有为你的班级提供这样的操作员,所以编译器正确地抱怨。
您无法重新调用对象的构造函数。但可以做的是等待声明对象,直到你确实需要它为止,然后在那里调用构造函数:
{
cout<< "Please enter the name, press enter, then the income of the house\n";
getline(cin, n);
cin >> i;
Household temp(n, n, i, i);
myWard.removeHouse(temp);
}
break;
我添加了大括号,因为此代码看起来像是switch
语句的一部分。在switch
块的中间声明变量,因为此代码现在可以使用temp
,可能会导致问题;大括号限制了新变量的范围。
答案 2 :(得分:0)
我相信这可能是因为你有两个构造函数只是因为它需要引用而不同。
编译器认为它不明确并且不知道要调用哪个构造函数;因此“不匹配”。