如何解决“不命名类型”错误

Keagansed

我收到以下错误:'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;
}

预先感谢您的任何帮助。

Angew不再为SO感到骄傲

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

解决方案是将成员函数的实现从头文件移到源文件。这样,头文件将仅需要类的声明,而无需定义,您可以轻松地将其直接放入“使用”头文件中:

class Iterator;

class Container
{
public:
    Container();
    Iterator* createIterator();
    friend class Iterator;

private:
    int* array;
};

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

Container.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();
}

当然还有DttoFactoryIterator)。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何解决此错误:Public不命名类型?

如何解决此类型不匹配错误?

如何解决类型不匹配问题?

如何解决这个 Haskell 类型错误?预期和实际类型不匹配

如何解决不兼容类型错误?

如何解决错误:“MyInheritedWidget”不是类型

如何解决错误“ E2010不兼容的类型:'TGUID'和'T'”?

如何解决此错误“类型不匹配:无法从List <String>转换为Iterator <String>”

返回流收集器的结果时,如何解决类型不匹配的错误?

如何解决此currying函数中的类型不匹配错误?

打开工作簿时如何解决“运行时错误” 13'类型不匹配

Excel VBA:如何解决索引和匹配函数类型不匹配错误

如何解决此错误 - 属性 {/DistributionConfig/Aliases} 的值与类型 {Array} 不匹配

R studio 如何解决命名替换错误

Codeigniter重命名文件后如何解决错误循环

如何解决scala中的类型不匹配

如何解决红宝石返回的对象的不匹配类型?

什么是“类型不匹配”,我该如何解决?

如何解决错误?

如何解决此异常不匹配错误?

如何解决pytorch中的大小不匹配错误?

如何解决 TensorFlow Autoencoder 中的维度不匹配错误

如何解决UiFrame :: getConfiguration()的“ =(TagGroup,RealNumber)不匹配”错误

如何解决此错误的呼叫不匹配功能?

如何解决绘图变量维度不匹配中的错误?

在Swift 3中,如何解决有关参数标签的错误不匹配String类型的任何可用重载?

如何解决MS Access 2010中的“条件表达式中的数据类型不匹配”错误?

如何解决“ MIME类型不匹配错误”,该问题阻止了我的Google Apps脚本中AJAX请求的资源?

如何解决.net标准中命名空间“System.Configuration”错误中不存在类型或命名空间名称“ConfigurationManager”?