1

コード内に次のヘッダー ファイルがあります。循環依存が発生していることが問題であることはわかっていますが、解決できないようです。それを修正する助けはありますか?

project.h はこのエラーを取得します: フィールド 'location' has incomplete type

#ifndef PROJECT_H_
#define PROJECT_H_
#include <string.h>
#include "department.h"

class department;

class project{

    string name;
    department location;

public:
    //constructors
    //Setters
    //Getters

};
#endif

employee.h は、こ​​の ERROR フィールド「'myDepartment' has incomplete type」を取得します

#ifndef EMPLOYEE_H_
#define EMPLOYEE_H_
#include "department.h"
#include <vector>

class department;
class project;


class employee
{
//attributes
    department myDepartment;
    vector < project > myProjects;

public:
    //constructor
    // Distructor
    //Setters
    //Getters

#endif

部門.h

#ifndef DEPARTMENT_H_
#define DEPARTMENT_H_

#include <string.h>
#include "employee.h"
#include "project.h"
#include <vector>

class project;
class employee;


class department{

private:
    string name;
    string ID;
    employee headOfDepatment;
    vector <project> myprojects; 
public:

    //constructors
    //Setters
    //Getters
};

#endif
4

2 に答える 2

3

あなたは周期的な を持っています#include

から#include "employee.h"とを削除してみてください。#include "project.h"department.h

またはその逆。

于 2013-11-03T09:39:55.027 に答える
0

次のようなインクルード ツリーがあると、問題が発生します。

project.h
  department.h

employee.h
  department.h

department.h
  employee.h
  project.h

通常は、ヘッダーを他のクラス ヘッダーからできるだけ独立させて、前方宣言を保持し、インクルードを削除してから、.cpp ファイルにヘッダーをインクルードすることをお勧めします。

例えば

class project;
class employee;

class department {
  ...
  employee* headOfDepartment;
  vector<project*> myprojects;

次に、department.cpp で

employee.h と project.h をインクルードし、コンストラクターでメンバーをインスタンス化します。これにより、unique_ptr をより適切に使用できるようになり、それらを削除する必要がなくなります。

class department {
  ...
  std::unique_ptr<employee> headOfDepartment;
  std::vector<std::unique_ptr<project>> myprojects;

別のヒントはusing namespace std、ヘッダーに含めず、代わりに名前空間を含めることです。std::vector<...>

于 2013-11-03T09:51:25.533 に答える