【问题标题】:Unknown type name 'class' when mixing Objective-C and C++混合 Objective-C 和 C++ 时的未知类型名称“类”
【发布时间】:2014-02-26 16:27:51
【问题描述】:

这快把我逼疯了。

我在 foo.h 文件中有一个 C++ 类声明。

class foo // error marks are here
{
};

当我在我的 fooUser.mm 文件中#include/#import 这个头文件时,它会编译。当我在我的 fooUser.h 文件中执行 #include/#import 时,它不会,并且编译器错误是。

Unknown type name 'class'; did you mean 'Class'?
Excpected ';' after top level declarator.

我正在使用 XCode 4.2,LLVM 编译器 3.0,...这应该很重要吗?

【问题讨论】:

  • “fooUser.h”是否包含在非 C++(或非 Objective-C++)文件中?
  • 是的,目前只有我的 AppDelegate.h 导入 fooUser.h
  • @Merlevede:标头通常不需要导入其他标头
  • 无论我如何调整,我都无法摆脱错误,我从 Apple (Cocoa_With_Carbon_or_CPP) 下载了一个示例,并比较了每个构建设置,但什么也没有。所以我所做的是创建一个新项目,添加一个虚拟的 'foo' C++ 类并且它起作用了,我从那里一点一点地建立起来,它仍然有效。但我仍然很困惑。要么我错过了一些非常愚蠢的事情,要么项目中的某些事情搞砸了。
  • @newacct 您说“标头通常不需要导入其他标头”-您从哪里获得 tyepdef、枚举等?

标签: objective-c objective-c++


【解决方案1】:

正如您在评论中所说,“fooUser.h”也包含在非 C++ 文件中,并且 导致编译器错误。头文件不是单独编译的,而是作为包含它们的“编译单元”的一部分。

您应该尝试将 C++ 声明分隔到包含的头文件中 仅来自 (Objective-)C++ 文件。

作为一种解决方法,您还可以通过

保护 C++ 声明
#ifdef __cplusplus
// …
#endif

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多