1

- -更新 - -

在我的项目中包含头文件和 cpp 文件时遇到问题,所以这里是文件:Person.h

#ifndef PERSON_H
#define PERSON_H

class Person {
private:
string firstName;
string lastName;
long NID;

public:
Person();
void toString();

string get_firstName() {
    return firstName;
}

string get_lastName() {
    return lastName;
}

long get_NID() {
    return NID;
}
};

#endif

扩展 Person Teacher.h 的教师

#include "Person.h"
#include <iostream>

#ifndef TEACHER_H
#define TEACHER_H

class Teacher : public Person {
private:
int avg_horarium;

public:
Teacher();
void toString();

int get_avg_horarium() {
    return avg_horarium;
}
};

#endif

然后是 Teacher.cpp:

#include "Teacher.h"
using namespace std;

Teacher::Teacher() : Person() {
cout << "Enter average monthly horarium: ";
cin >> avg_horarium;
}

void Teacher::toString() {
Person::toString();
cout << "Average monthly horarium: " << avg_horarium;
}

扩展 Person 的另一个类是 Student,由于它与老师相似,我不会在这里发布它。我的问题是我做错了什么才能在屏幕截图上显示所有这些错误:http: //s14.postimage.org/45k08ckb3/errors.jpg

4

3 回答 3

2

问题是您对stdafx.h文件的错误处理。在 MSVC 编译器中,启用预编译头文件时,将忽略#include "stdafx.h"line之前的所有内容。

首先,停止包含stdafx.h在头(.h)文件中。stdafx.h应该包含在实现(.cpp)文件中。在您的情况下,#include "stdafx.h"应放入Person.cppandTeacher.cpp中,而不是放入Person.handTeacher.h中。

其次,要么禁用项目中的预编译头文件,要么确保它#include "stdafx.h"始终是每个实现文件中第一个有意义的行。所有其他#include指令都应该在之后 #include "stdafx.h",而不是之前。

于 2012-11-10T00:45:38.050 回答
1

在你的头文件中放置;

 #ifndef CLASSNAME_H
 #define CLASSNAME_H

在文件的顶部,include语句之后,类声明之前。放

#endif

在所有代码之后的文件底部。这确保了类只定义一次。对同一个头文件有多个包含通常会导致链接问题。

于 2012-11-10T00:29:48.797 回答
0

只需在头球上放一个后卫

IE

#ifndef _THIS_FILENAME
#define _THIS_FILENAME

wibble etc


#endif

编辑

忘了提到使用前向声明 - 节省了重新编译的费用。

于 2012-11-10T00:33:38.943 回答