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 を拡張するもう 1 つのクラスは Student です。これは Teacher に似ているため、ここには掲載しません。私の質問は、スクリーンショットでこれらすべてのエラーを取得するために何が間違っているのかです: http://s14.postimage.org/45k08ckb3/errors.jpg

4

3 に答える 3

2

stdafx.h問題は、ファイルの扱いが間違っていることです。MSVC コンパイラでは、プリコンパイル済みヘッダーが有効になっている場合、#include "stdafx.h"行より前のすべてが無視されます。

まず、stdafx.hヘッダー ( .h) ファイルへのインクルードを停止します。stdafx.h実装 ( .cpp) ファイルに含まれることになっています。あなたの場合、andではなくand#include "stdafx.h"に配置する必要があります。Person.cppTeacher.cppPerson.hTeacher.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

ヘッダーにガードを入れるだけ

すなわち

#ifndef _THIS_FILENAME
#define _THIS_FILENAME

wibble etc


#endif

編集

前方宣言の使用について言及するのを忘れていました - 再コンパイルの費用を節約します。

于 2012-11-10T00:33:38.943 に答える