3

リストのリストを使用してグラフをプログラミングしています。そのために、2 つのクラスがあり、このクラスのそれぞれに、同じクラスの別のオブジェクトへのポインターと、2 番目のクラスのオブジェクトへのポインターがあります。コードは次のとおりです。

ファイル Vh:

#ifndef VERTICEPUNT_H
#define VERTICEPUNT_H

#include "A.cpp"

typedef char E;

 class V
{
    public:
    E etiqueta;
    V* siguiente;
    A* primera;  //<- Error: 'A' does not name a type

    V();
    ~V();
};

#endif // VERTICEPUNT_H

ファイル V.cpp:

#include "V.h"

 V::V()
{
     etiqueta = ' ';
     siguiente = 0;
     primera = 0;  //<- Error: 'primera' was not declared in this scope
}

 V::~V()
{
    delete primera;
    delete siguiente;
}

ファイルああ:

#ifndef ARISTAPUNT_H
#define ARISTAPUNT_H

#include "V.cpp"

typedef int P;

 class A
{
    public:
        P peso;
        V* vertice;
        A* siguiente;

         A();
        ~A();
};

 #endif // ARISTAPUNT_H

A.cpp:

#include "A.h"

 A::A()  //<- Error: 'A' does not name a type
{
     peso = 0;
     siguiente = 0;
     vertice = 0;
}

 A::~A()  // <- Error: 'A' does not name a type
{
    delete siguiente;
}

どうすればそれを修正できますか?

4

1 に答える 1

5

このメッセージは、クラス名がスコープ内にないことを意味します。V.h含めるべきではありません。含めるA.cpp必要がありますA.h。をA.h含める場合も同様ですV.cpp

一般に#include、ヘッダーまたは別の CPP ファイルから CPP ファイルを取得することは決してありません。.hヘッダー ファイルのみが、プリプロセッサによってインクルードされるように設計されています。

このような循環定義の場合は、クラスを定義先のポインターとして前方宣言し、そのクラスのヘッダーを含めないようにする必要があります。

#ifndef VERTICEPUNT_H
#define VERTICEPUNT_H

class A; // <<== Forward declare the class.

typedef char E;

 class V
{
    public:
    E etiqueta;
    V* siguiente;
    A* primera;

    V();
    ~V();
};

#endif // VERTICEPUNT_H
于 2013-06-27T03:16:24.430 に答える