-2

我一直在为我的物理学学位的编程模块做一些课程,但我遇到了一些麻烦。我必须创建一个名为 Person 的类和一个名为 Employee 的子类,这样:Person.hpp:

#ifndef PERSON_HPP_
#define PERSON_HPP_

class Person {
public:
    Person(const std::string & name="Anonymous"): name(name) {;}
    ~Person() {;}

    std::string getname(){
        return name;
    }

    void setname(std::string newname) {
        name = newname;
    }

    void Print();

private:
    std::string name;
};

#endif /* PERSON_HPP_ */

个人.cpp:

void Person::Print(){
    std::string name = Person::getname;
    std::cout << name << std::endl;
}

员工.hpp:

#ifndef EMPLOYEE_HPP_
#define EMPLOYEE_HPP_

class Employee: public Person {
public:
    Employee(const std::string & name, const std::string & job) : name(name), job(job){;}
    ~Employee() {;}

    std::string getjob(){
        return job;
    }

    void setjob(std::string newjob) {
        job = newjob;
    }

    void Print() const;

private:
    std::string job;
};

#endif /* EMPLOYEE_HPP_ */

员工.cpp:

void Employee::Print(){
    Person::Print();
    std::string job = Employee::getjob;
    std::cout << job << std::endl;
}

主.cpp:

#include <iostream>
#include <string>
#include <vector>
#include "Person.hpp"
#include "Person.cpp"
#include "Employee.hpp"
#include "Employee.cpp"
#include "Friend.hpp"
#include "Friend.cpp"

int main() {
    return 0;
}

错误在我的employee.cpp 中。构建此错误时显示:../Employee.cpp:10:6: error: use of undeclared identifier 'Employee'

我意识到我可能犯了一个非常基本的错误,但是我看不到它让我感到沮丧。

任何帮助都会很棒!在此先感谢,肖恩·库珀

注意employee.cpp 的目的是打印员工的姓名及其相关工作。

4

3 回答 3

1

你的错误在这里:

#include "Employee.cpp"

永远不要包含.cpp文件,将它们编译为链接阶段的单独输入。

也不要忘记#include "Employee.hpp"存档Employee.cpp!同样的事情也适用于#include "Person.cpp"等。

于 2014-03-24T18:02:02.843 回答
1

include的应该是这样的:

个人.cpp:

#include <iostream>
#include <string>
#include "Person.hpp"

员工.cpp:

#include <iostream>
#include <string>
#include "Employee.hpp"

主文件

#include <iostream>
#include <string>
#include <vector>
#include "Person.hpp"
#include "Employee.hpp"
#include "Friend.hpp"

也就是说,每个.cpp(实现)都包括相应的.hpp(接口)以及所需的附加标头(如<string>)。您main.cpp包括所有需要的标题,但没有其他.cpp文件。编译器将单独解析所有.cpp文件,链接器将结果链接到可执行文件中。根据经验,永远不要包含.cpp任何地方。

具体的错误是当编译器看到

void Employee::Print()

并且不知道是什么Employee。包括Employee.hpp通过引入Employee的定义来解决这个问题。

于 2014-03-24T18:02:14.300 回答
1

您包含了几个 .cpp 文件,而我猜您打算包含头文件。

除了:

  Person::Print(); //this call is also wrong since Print() is not static
  std::string job = Employee::getjob;

getjob()是一个成员函数,你在调用成员函数时错过了。同时,getjob()它不是静态成员函数,它应该与类的对象绑定。你这样称呼它是不正确的。同样的错误发生在这里:

 std::string name = Person::getname; //inside Print() function of Person
于 2014-03-24T18:02:17.130 回答