c ++的新手,无法弄清楚为什么visual studio不喜欢我的“HealthProfile person.setFirstName(first)”代码行。错误是“人”,错误不是默认构造函数。这可能是一件非常明显的事情,但我的代码几乎与我书中的代码完全相同。提前谢谢!
主要
#include <iostream>
#include "HealthProfile.h"
using namespace std;
int main()
{
string first;
HealthProfile person;
cout << "Enter first name" << endl;
getline(cin,first);
person.setFirstName(first);
}
标题
#include <string>
using namespace std;
class HealthProfile
{
public:
HealthProfile(string, string, string, int, int, int, int, int);
void setFirstName(string);
string getFirstName();
void setLastName(string);
string getLastName();
};
功能
#include <iostream>
#include "HealthProfile.h"
using namespace std;
HealthProfile::HealthProfile(string first, string last, string g,
int m, int d, int y, int h, int w)
{
setFirstName(first);
setLastName(last);
setGender(g);
setMonth(m);
setDay(d);
setYear(y);
setHeight(h);
setWeight(w);
}
void HealthProfile::setFirstName(string first)
{
firstName = first;
}
string HealthProfile::getFirstName()
{
return firstName;
}
void HealthProfile::setLastName(string last)
{
lastName = last;
}
string HealthProfile::getLastName()
{
return lastName;
}
答案 0 :(得分:6)
setFirstName()
没有错。
问题是你已经声明了一个构造函数需要三个strings
和五个ints
,这会删除你在调用HealthProfile person
时使用的默认构造函数
解决方案是使用HealthProfile
cosntructor并将其传递给三个strings
和五个ints
,或者通过添加{{1}来声明和定义不带参数的构造函数到标题。
答案 1 :(得分:3)
这一行主要是:
HealthProfile person;
使用默认构造函数声明HealthProfile类的实例。您尚未声明默认构造函数。创建自己的自定义构造函数可防止为您隐式创建默认构造函数。如果要使用默认构造函数和自定义构造函数,则需要显式声明和定义它。如果您不想使用默认构造函数,则传入参数以使用自定义构造函数。
在.h中声明默认构造函数:
HealthProfile();
并在你的.cpp中定义它:
HealthProfile::HealthProfile() { }
或者只需在main中调用现有的自定义构造函数:
HealthProfile person(first,last,g,m,d,y,h,w); // AFTER collecting values for these arguments