这个该死的错误是一个众所周知的问题
'{'令牌
之前的预期类名好吧,尽管我努力工作和谷歌搜索,我无法解决这个错误。抱歉。这是我的最后一支岸。
在我的一个项目的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
请您注意我使用;在每个班级之后,我检查了我的项目中的每个标题,寻找这个问题,并没有发现任何类没有跟着;在其结束后。这对workflow.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
真的不知道如何解决这个问题...请帮帮我。 谢谢
答案 0 :(得分:4)
您应该在代码上运行预处理器但不编译它,并检查结果。为此,请复制运行失败编译的命令,然后在大多数编译器中删除-o outfile
选项并添加类似-E
的内容(有关仅执行预处理的标志,请参阅编译器的文档) )。
编译器将发出(在stdout上)所有#includes的整个翻译单元并解决这个问题,这样你就可以清楚地看到缺少的内容(只需搜索与错误行匹配的代码行,然后查看即可查看你发现了什么声明)。如果还不清楚问题是什么,请将预处理的输出写入文件并尝试编译。然后,您可以调整预处理源,并查看修复它所需的内容。
答案 1 :(得分:3)
只是一个疯狂的猜测:你的错误说明在
class WFQueueManagerProxy : public WFQueue { // This is the problem (line 42)
//...
};
在{之前必须有一个类名。因此,我假设编译器不知道WFQueue
是一个类。你确定它的定义是否包括在内?我的意思是,也许在wfqueue.hpp中,这个类被命名为WfQueue
或者以其他方式有所不同?
答案 2 :(得分:1)
问题可能在于错误名称包括警卫。尝试检查它们是否真的是每个文件的唯一。您似乎在编译WFQueue
时禁用了WFQueueManagerProxy
的定义。
答案 3 :(得分:1)
这件事从未发生过......我的上帝对不起...... 我的虚拟机备份磁盘似乎与原始磁盘冲突。我在虚拟机上运行我的项目,2小时前做备份可能搞砸了......我调整了它,现在虚拟机可以找到正确的文件夹和正确的文件进行编译。这是令人惊讶的ahaha和显而易见的,ols文件g ++尝试编译,其中以前的版本充满了错误......这是其中一个错误...一个警卫标题重复。 Icecrime是对的...尽管我在我的文件中寻找重复,在之前的版本中,我没有解决这个问题,我粘贴了一些文件,忘了更改防护标题。 感谢大家的耐心和努力。 对不起,我没注意到我机器上这个非常奇怪的虚拟磁盘碰撞。再次感谢。
答案 4 :(得分:0)
确保输入
using namespace omnetpp;
包括之后。它解决了我的问题。