“基类未定义。”

时间:2012-04-08 20:30:52

标签: c++ inheritance

我有一个错误:

  

错误C2504:'employee':基类未定义。

我正在使用Visual Studio 2010。

这是我第一次使用C ++进行继承,但我无法弄清楚我做错了什么。当我尝试创建一个派生另一个类的类时,它表示父类是未定义的,即使我有包含父类的头文件。可能是什么问题?

Main.cpp的:

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

#include "manager.h"

int main()
{
manager ian;
ian.getdata();
ian.putdata();

return 0;
}

Manager.h:

#pragma once
#include "employee2.h"
#include "student.h"

class manager : private employee2, private student //Error happens here
{
    //Stuff
};

Student.h:

#pragma once
class student
{
    //Stuff
};

Employee2.h:

#pragma once
#include "employee.h"
class employee2 : employee
{
    //Stuff
};

它表示学生班和employee2班都未定义。此外,employee2类继承了一个名为employee的类,它也会获得相同的错误。我做错了什么?

编辑:这是我的student.cpp文件。我遇到错误的所有其他.cpp文件看起来与此类似。

#include "student.h"

void student::getedu(){
cout << "Enter name of school or university: ";
cin >> school;
cout << "Enter highest degree earned \n";
cout << "(Highschool, Bachelor's Master's, PhD)";
cin >> degree;
}

void student::putedu() const{
cout << "\n School or university: " << school;
cout << "\n Highest degree earned: " << degree;
}

2 个答案:

答案 0 :(得分:1)

我不相信你会根据你展示的代码得到“x未定”。实际上,您似乎使用了#include错误。

#include employee.h

应该是

#include "employee.h"

除此之外,除了您提到的缺少的employee课程,以及manager在您的示例中没有getdata和“putdata之外,您的代码编译正常。

答案 1 :(得分:1)

确保每个文件末尾都有空格。 在编译过程之前,文件已经连同,并且你的pragma可以被停用,因为它是这样的:

}#pragma once

'}'来自之前包含的文件。

这可能是一个原因。此外,代码看起来像它应该是可编译的。