如何解决"Does not name a type"错误

How to solve "Does not name a type" error

本文关键字:name not type 错误 Does 解决 何解决      更新时间:2023-10-16

我收到以下错误: 'class name' does not name a type我所有的课程。我怀疑这可能是一个循环依赖,但我不知道如何解决它,因为每个类都需要从下一个类访问一个函数。以下是我的课程:

容器.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

工厂.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

主.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;
}

提前感谢您的任何帮助。

它确实是标头之间的循环依赖关系。 Container.h包括Factory.h,包括Iterator.h,包括Container.h

解决方案是将成员函数的实现从头文件移动到源文件中。这样,头文件只需要类的声明,而不是定义,你可以轻松地将其直接放在"消费"头文件中:

class Iterator;
class Container
{
public:
    Container();
    Iterator* createIterator();
    friend class Iterator;
private:
    int* array;
};

然后,在适当的源文件(如 Container.cpp(中,实现成员函数并包含所需的任何标头:

容器.cpp

#include "Container.h"
#include "Factory.h"
Container::Container() : array(new int[10])
{
    for (int i = 0; i < 10; ++i) {
        array[i] = i;
    }
}
Iterator* Container::createIterator()
{
    Factory fac;
    return fac.factoryMethod();
}

(当然,Dtto 表示FactoryIterator(。

在构建最终二进制文件时,不要忘记将所有源文件链接在一起。