web-dev-qa-db-ja.com

「タイプに名前を付けない」エラーを解決する方法

次のエラーが発生します:'class name' does not name a type私のすべてのクラス。循環依存の可能性があると思いますが、各クラスは次の関数にアクセスする必要があるため、解決方法がわかりません。以下は私のクラスです:

Container.h:

#ifndef CONTAINER_H
#define CONTAINER_H

#include "Factory.h"

class Container
{
public:
    Container()
    {
        array = new int[10];
        for (int i = 0; i < 10; ++i) {
            array[i] = i;
        }
    }
    Iterator* createIterator()
    {
        Factory fac;
        return fac.factoryMethod();
    }
    friend class Iterator;

private:
    int* array;
};

#endif //CONTAINER_H

Factory.h:

#ifndef FACTORY_H
#define FACTORY_H

#include "Iterator.h";

class Factory
{
    Iterator* factoryMethod(Container* con)
    {
        return new Iterator(con);
    }
};

#endif //FACTORY_H

Iterator.h:

#ifndef ITERATOR_H
#define ITERATOR_H

#include "Container.h"

class Iterator
{
public:
    Iterator(Container* con)
    {
        this->con =con;
    }
    int getFromIndex(int i)
    {
        return con->array[i];
    }
private:
    Container* con;
};

#endif //ITERATOR_H

main.cpp:

#include <iostream>
using namespace std;

#include "Container.h"
#include "Iterator.h"

int main() {
    Container con;
    Iterator* it = con.createIterator();
    cout<<it->getFromIndex(2)<<endl;

    return 0;
}

よろしくお願いします。

4
Keagansed

ダンが言ったように、関数本体を.cppファイル(異なる変換単位)に入れます。

また、型へのポインタのみを使用している場合は、それを#includeする必要はありません。前方宣言を行うだけです。

1
Ivan Rubinson