C ++需要使用自定义构造函数的帮助

时间:2014-01-23 01:02:03

标签: c++

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;
}

2 个答案:

答案 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