0

ストアを管理するプログラムを作成しようとしています。いくつかのユーザーと商品と注文があります。これは私の User.h、Good.h ファイルです:

ユーザー.h:

#ifndef _USER
#define _USER

#include "Store.h"
#include "Good.h"

namespace question1
{
    class User
    {
        const Store store;
    public:
        User(Store &s) : store ( s )
        {
        }
    };

    class AdminUser:User
    {
    };

    class DeliveryUser:User
    {
    };

    class OrderUser:User
    {
        void registerOrder(Order &o);
    };

    class ReceptionUser:User
    {
        void importGood(Good &g);
        void increaseGood(Good &g);
    };
}

#endif

そしてGood.h:

#ifndef _GOOD
#define _GOOD

#include <string>
#include <vector>
#include "User.h"

namespace question1
{
                                                    class Date
{
 public:
    Date ();
    Date ( int mn, int day, int yr);  // constructor
    void display();                   // function to display date
    int GetMonth();
    void SetMonth(int mn);
    ~Date();
 private:
    int month, day, year;
    int DaysSoFar();
};

    enum Ordertype{Newly_registered, Check, Answered};

    class Order
    {
        int num;
        std::string customerName;
        Date registered, Check;
        Ordertype type;
        std::vector<int> codelist, numlist;
    public:
        Order();
        Order(Order& o);
    };

                        class ImportDate
{
    Date importDate;
    User importer;
    int num;
};

                            class ExportDate
{
    Date exportDate;
    User exporter;
    int num;
    Order ex;
};

    class Good
    {
        std::string name;
        int code;
        Date in;
        int innum, AvailableNum;
        User importer;
        std::vector<ImportDate> importHistory;
        std::vector<ExportDate> exportHistory;
    public:
        Good();
        Good(Good &g);
    };

                int max (int a, int b)
{
   if (a>b) return(a) ; else return (b);
}

                int min (int a, int b)
{
   if (a>b) return(b); else return (a);
}
}

#endif

しかし、この2つのコードだけをコンパイルすると、ユーザーファイルにエラーが発生しました

「構文エラー: 識別子 'Order'、28 行目

「構文エラー: 識別子 'Good'、33 行目

「構文エラー: 識別子 'Good'、34 行目

関数のパラメーター リストで。Visual Studio 2010 を使用し、空のプロジェクトを開きます。

誰でも私を助けることができますか?

4

2 に答える 2

2

循環参照があります。要するに、次のような結果になります。

class Good
{
    User * fn() {} // What is a User?
};

class User
{
    Good * fn() {}
};

C++ は C# のように動作せず、ファイルをトップダウンで読み取るため、User への最初の参照に遭遇したとき、それが何であるかはまだわかりません。クラスの順序を入れ替えても、問題は再発します。

おそらくそれらを同じファイルに入れて、タイプ転送を使用する必要があります。

class User;

class Good
{
    User * fn() {} // Ah, User is some class. Go on.
};

class User
{
    Good * fn() {}
};

または(Agentlienが示唆するように):

class User;

class Good
{
    User fn();
};

class User
{
    Good fn();
};

User Good::fn() { return User(); }

Good User::fn() { return Good(); }
于 2013-04-17T05:19:19.950 に答える