c++ - Impossible expected class-name before ‘{’ token 错误解决

标签 c++ class inheritance inclusion

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

'{' 标记前的预期类名

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

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

#include "wfqueue_proxy_factory.hpp"

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

In file included from wfqueue_proxy_factory.hpp:29,from ui.cpp:28: wfqueue_manager_proxy.hpp:42: error: expected class-name before ‘{’ token

我的项目中有三个类: 首先

// 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

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

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

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

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

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

最佳答案

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

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

关于c++ - Impossible expected class-name before ‘{’ token 错误解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4296785/

相关文章:

c++ - 控制对 C++ 全局范围的访问?

c++ - "(f(x))+g(y)"是否可以确保在 C++ 中首先调用 f(x)?

java - JNI 不适用于 __stdcall

C++ 参数化构造函数错误

Python,如何从存储在数据库中的类中实例化类?

.net - 如何使用.Net中的反射从密封类继承?

c++ - 为什么我使用 substr 调用会超出范围?

c++ - 仅特化模板函数实现的一部分

Java 不明确的结果

sql - 用继承设计数据库是个好主意吗?