【问题标题】:Inclusion of POCO Header Files in Objective C++ .mm file results in Compilation Error on Xcode 6在 Objective C++ .mm 文件中包含 POCO 头文件会导致 Xcode 6 上的编译错误
【发布时间】:2015-08-08 06:00:51
【问题描述】:

如果我在 .mm 文件或 .h 文件中包含任何 POCO 头文件,我会看到以下奇怪的错误。如果我在 .cpp 文件中包含标头,则项目成功编译。任何使 POCO 在目标 C 项目中运行的帮助或示例代码都将不胜感激。

代码如下:

//File: test.mm

#import "test.h"    
#include "Poco/JSON/Object.h"

@implementation test
-(void)test{
 Poco::JSON::Object obj;
}
@end

这里是错误的截图

详细错误:

In file included from /Users/a/Desktop/test/theta/theta/test.mm:10:
In file included from /Users/a/Desktop/poco-1.6.0- all/JSON/include/Poco/JSON/Object.h:24:
In file included from /Users/a/Desktop/poco-1.6.0-all/JSON/include/Poco/JSON/Array.h:25:
In file included from /Users/a/Desktop/poco-1.6.0-all/Foundation/include/Poco/Dynamic/Var.h:26:
In file included from /Users/a/Desktop/poco-1.6.0-all/Foundation/include/Poco/Dynamic/VarHolder.h:24:
 In file included from /Users/a/Desktop/poco-1.6.0-all/Foundation/include/Poco/NumberFormatter.h:24:
/Users/a/Desktop/poco-1.6.0-all/Foundation/include/Poco/NumericString.h:261:8: error: expected member name or ';' after declaration specifiers
            void check(char* ptr)
            ~~~~ ^

【问题讨论】:

  • 您是否尝试过展开错误消息,查看实际正在编译的文件?您的项目中是否有任何包含这些头文件的非 C++ 文件,例如.c 或 .m 文件?
  • 抛出错误的文件是 Foundation/include/Poco/NumericString.h 并且项目不包含任何包含任何 POCO 标头的 c 或 m 文件
  • 不,源文件。编译器不编译头文件,它总是编译源文件(以及源文件上下文中的头文件,或“编译模块”)。单击第一条错误消息旁边的三角形时,您会看到什么文件层次结构。它应该在那里显示“包含在文件中”,通常您可以再折叠几次。
  • 用相关细节更新了问题。

标签: c++ xcode poco objective-c++ poco-libraries


【解决方案1】:

好的,错误的原因是 POCO 头文件与 OSX SDK 中的头文件之一冲突。 在包含任何标题之前添加以下行修复了编译问题。

#undef check

【讨论】:

  • 顺便说一句——你可以让 Xcode 向你展示你的代码在预处理后的样子,方法是从文本编辑器窗格左上角的弹出窗口中选择“预处理”(四个连接的小方块)。那可能会告诉你check 被定义为某事。否则。
  • 感谢您的解决方案。经过长时间的搜索,我终于来到了这里。赞成
猜你喜欢
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多