3

这个该死的错误是一个众所周知的问题

'{' 标记之前的预期类名

好吧,尽管我努力工作和谷歌搜索,我还是无法解决这个错误。对不起。这是我最后的海岸。

在我的一个项目的 ui.cpp 中,我这样做:

#include "wfqueue_proxy_factory.hpp"

好的,这在我的编译器中引发了这个愚蠢的错误:

在 wfqueue_proxy_factory.hpp:29 中包含的文件中,来自 ui.cpp:28:wfqueue_manager_proxy.hpp:42:错误:“{”标记之前的预期类名

我的项目中有三个类:第一类

// wfqueue_proxy_factory.hpp
#ifndef _WFQUEUE_PROXY_FACTORY_HPP
#define _WFQUEUE_PROXY_FACTORY_HPP
#include "wfqueue_manager_proxy.hpp"
// ...
class WFQueueProxyFactory {
//...
};
#endif

第二

// wfqueue_manager_proxy.hpp
#ifndef _WFQUEUE_MANAGER_PROXY_HPP
#define _WFQUEUE_MANAGER_PROXY_HPP
#include "workflow.hpp"
#include "wfqueue.hpp"
// ...
class WFQueueManagerProxy : public WFQueue { // This is the problem (line 42)
//...
};
#endif

第三

// wfqueue.hpp
#ifndef _WFQUEUE_HPP
#define _WFQUEUE_HPP
#include "workflow.hpp"
class WFQueue {
// ...
};
#endif

请注意我使用 ; 在每节课的 } 之后,我检查了项目中的每个标题以查找此问题,但没有找到任何未跟随的类;在它的右括号之后。这对工作流.hpp 有效,它是一个简单的类(不是从任何类派生的,只是一个普通类)。

WFQueue 是某种接口,我也将此模式与其他类一起使用,并且它们可以工作。WFQueue 包含一些虚拟纯方法......无论如何问题不应该在这里......我想这是因为我将另一个“接口”类与其他类一起使用并且它们工作正常。

如果我这样做,这个错误就会消失:

// wfqueue_manager_proxy.hpp
#ifndef _WFQUEUE_MANAGER_PROXY_HPP
#define _WFQUEUE_MANAGER_PROXY_HPP
#include "workflow.hpp"
#include "wfqueue.hpp"
// ...
class WFQueueManagerProxy {
//...
};
#endif

真的不知道如何解决这个问题......请帮助我。谢谢

4

5 回答 5

4

你应该在你的代码上运行预处理器而不是编译它,然后检查结果。为此,请复制运行失败编译的命令,然后对于大多数编译器,您将删除该-o outfile选项并添加类似-E的内容(有关仅进行预处理的标志,请参阅编译器的文档)。

编译器将发出(在标准输出上)具有所有#include 和此类已解析的整个翻译单元,因此您可以清楚地看到缺少的内容(只需搜索与错误行匹配的代码行,然后查看您的声明寻找)。如果仍然不清楚问题是什么,请将预处理后的输出写入文件并尝试编译。然后,您可以调整预处理的源代码并查看需要修复它的内容。

于 2010-11-28T13:13:43.160 回答
3

只是一个疯狂的猜测:你的错误说

class WFQueueManagerProxy : public WFQueue { // This is the problem (line 42)
//...
};

{ 之前必须有一个类名。因此我假设编译器不知道这WFQueue是一个类。你确定它的定义包括在内吗?我的意思是,也许在 wfqueue.hpp 中,该类以WfQueue其他方式命名或不同?

于 2010-11-28T12:55:40.190 回答
1

问题可能在于名称错误的包括警卫。尝试检查它们是否真的每个文件都是唯一的。似乎您已经禁用了WFQueuewhile compile的定义WFQueueManagerProxy

于 2010-11-28T12:56:48.897 回答
1

这是从来没有发生过的事情......我的上帝对不起......我的虚拟机备份磁盘似乎与原始磁盘发生冲突。我在虚拟机上运行我的项目,进行备份,2 小时前,可能搞砸了一些东西......我调整了它,现在虚拟机可以找到正确的文件夹和正确的文件进行编译。太棒了啊哈哈,很明显,ols 文件 g++ 试图在以前的版本充满错误的地方编译……这是其中一个错误……重复的保护头。Icecrime 是对的……尽管我在我的文件中查找了重复项,但在以前的版本中,我没有解决这个问题,我粘贴了一些文件并忘记更改保护头。感谢大家的耐心和努力。很抱歉,我没有注意到我的机器中出现了这个非常奇怪的虚拟磁盘冲突。

于 2010-11-28T13:23:43.147 回答
0

确保您输入了

using namespace omnetpp;

包括后。它解决了我的问题。

于 2017-05-19T18:13:42.813 回答