如何解决"Does not name a type"错误
How to solve "Does not name a type" error
我收到以下错误: '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 表示Factory
和Iterator
(。
在构建最终二进制文件时,不要忘记将所有源文件链接在一起。
相关文章:
- 将系数存储在头文件的数组中("does not name a type"错误)
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- C++初学者:为什么我的编译器根据我的循环返回"name not found"?
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- 如何解决"'mutex' in namespace 'std' does not name a type"?
- 在 C++ 中使用命名空间时出现"does not name a type"错误
- 已声明时"Does not name a type"错误
- 嵌套类"does not name a type"
- 为什么当我的代码超出函数范围时,"does not name a type"出现编译器错误?
- 巴泽尔中的错误"name 'new_local_repository' is not defined"
- 无法分隔标头类。我得到"does not name a type"
- 修复第三方代码:"error: ‘enable_if’ in namespace ‘std’ does not name a template type"
- 在 c++ 中,如果包含标头,为什么我会收到'does not a name of type'错误?
- 什么原因导致我的"‘FatalError’ in namespace ‘Foam’ does not name a type"错误?
- 编译错误"String does not name a type"
- 在模板化类中使用嵌套嵌套类时的'dependent name is not a type'
- 如何修复" 'Function' does not name a type "?[阿杜伊诺]
- 类定义内部"error: 'a' does not name a type"
- "does not name a type" .但它确实如此
- 不知道为什么我会得到"error: does not name a type "