所以我有一个包含在另一个类中的类,它不断抛出形式为“错误:’ProblemClass’没有被声明的编译错误。文件是这样设置的:
#ifndef PROBLEMCLASS_H
#define PROBLEMCLASS_H
#include <iostream>
#include <cmath>
class ProblemClass
{
public:
virtual void Init() = 0;
};
#endif
发生错误的类如下所示:
#ifndef ACLASS_H
#define ACLASS_H
#include "problemclass.h"
class AClass : public Base
{
public:
void DoSomething(ProblemClass* problem);
};
#endif
编译错误发生在 void Dosomething();
我知道这里的代码不足以解决问题。我一直无法创建一个可以重现它的最小示例。所以我的问题要笼统得多;什么样的事情可能会导致这种情况?有什么我应该特别寻找的,或者我应该遵循一些查询来追踪它吗?
此代码在项目的几乎相同版本中编译得很好。
任何形式的帮助将不胜感激,无论多么模糊。我在 win 7 64 位中使用带有 mingw4.4.1 的代码块 10.05。
原文由 gj5 发布,翻译遵循 CC BY-SA 4.0 许可协议
您似乎在说您显示的代码实际上并没有产生您遇到问题的编译器错误。所以我们只能猜测。以下是一些可能性:
problemclass.h
的文件中包含ProblemClass
。ProblemClass
的名称。如果这是一个大写错误,例如写Problemclass
或problemClass
而不是ProblemClass
,这可能很难发现。#defines
从一个头文件复制粘贴到另一个头文件,然后忘记更改定义的名称。然后只有这两个包含的头文件中的第一个才会生效。ProblemClass
in a namespaceA
, in which case you must refer toProblemClass
asA::ProblemClass
if you are referring to it从命名空间A
之外。ProblemClass
一个仅在您包含problemclass.h
后定义的宏,在这种情况下,您所看到的ProblemClass
被宏替换为其他内容预处理器。ProblemClass
problemclass.h
problemclass.h
实际上定义了其他内容。