无法分离实现和界面

时间:2014-02-21 20:26:17

标签: c++ interface header

我无法编译以下文件。 我试图将名称和年龄传递给一个对象,并在检查并将每个年龄分配到适当的类别(成人,孩子......)后,我正在尝试打印它。

我的3个文件如下:

第一个1:

//cannot access private member declared in class Person
//No constructor could take the source type, or constructor overload resolution was ambiguous.
#include <iostream>
#include <string>
using namespace std;
#include "person2.h"

void getData(Person&);
void displayData(Person&);

int main(){
    Person p;
    getData(p);
    displayData(p);
}

void getData(Person& p){
    cout<< "Enter the name: ";
    cin>> p.name;
    cout<<"Enter the age: ";
    int age;
    cin>> age;
    p.setAge(age);
    p.ageGroup = p.determineAgeGroup(age);
}
void displayData(Person& p){
    cout<<p.name<< " is in the group of " << p.ageGroup <<endl;
}

第二个:

#include <iostream>
#include <string>
using namespace std;

class Person {
public:
    string name;
    string ageGroup;
    void setAge(int&);
    string getAge();
    string getAgeGroup(int);

private:
    int age;
    string determineAgeGroup(int );

};

第三个:

#include <iostream>
#include <string>
#include "person2.h"
using namespace std;

void Person::setAge(int& a){
    if(a<0) cout<< "No";
}
string Person::getAge(){
    return age;
}
string Person::determineAgeGroup(int a){
    if(a>= 65) return "Senior";
    else if(a<65 & a>= 20) return "Adult";
    else if(a<20 & a>= 13) return "Teen";
    else return "Kid";  
}
string Person::getAgeGroup(int a){
    return determineAgeGroup(a);<<endl;
}

1 个答案:

答案 0 :(得分:0)

检查以下内容:

  • endl而不是在displayData
  • 中结束
  • 在getData中声明int age并将该值传递给p.setAge
  • getAge的返回值应为int
  • 使defineAgeGroup()为public或从setAge()等成员函数调用determineAgeGroup()或调用您的公共函数getAgeGroup()。

这至少应该让你编译......

注意:解决问题的最终编辑是项目符号4,特别是调用公共函数getAgeGroup()。