包含标头会导致解析问题

including header causes parse issues

本文关键字:问题 包含标      更新时间:2023-10-16

我为C++编写了一个Objective-C包装器,所以在主文件中,我只需要使用C++代码。在一个测试项目中,它完美地工作,所以我想在一个相当大的游戏中实现。问题是,在我只使用

#include "ViewWrapper.hpp"

在我的基节点类(来自 Cocos2d-x 的 CCNode.h)中,我在另一个文件中(named_params.hpp来自"Boost")中得到了很多解析、语义和 Leixcal 或 Prepocessor 问题,但没有真正使用它,只编写包含。如果我删除它,一切正常。有谁知道这是什么原因?

(在我的测试项目中,我也将其包含在CCNode中,没有问题。

编辑:ViewWrapper.hpp代码:

#ifndef __Cocos__ViewWrapper__
#define __Cocos__ViewWrapper__
#include <CoreGraphics/CGGeometry.h>
#include <CoreGraphics/CGColor.h>
class ViewWrapper
{
public:
    const char* accessibilityLabel();
    void setAccessibilityLabel(const char* accessibilityLabel);
    CGRect accessibilityFrame();
    void setAccessibilityFrame(CGRect accessibilityFrame);
    CGRect frame();
    void setFrame(CGRect frame);
    CGColorRef backgroundColor();
    void setBackgroundColor(CGFloat r, CGFloat g, CGFloat b, CGFloat a);
    ViewWrapper (CGRect frame);
    ViewWrapper (void);
    ~ViewWrapper (void);
private:
    struct Impl;
    Impl* impl;
};
#endif /* defined(__Cocos__ViewWrapper__) */

希望有帮助。

错误在 struct nil {...} 中。也许它有一些nil的问题,因为Objective-C使用nil和我的Wrapper wrappsObjective-C代码?但是我的标题是一个.hpp文件...

答案(无法正确回答,因为它处于保留状态):我删除了两个包含

#include <CoreGraphics/CGGeometry.h>
#include <CoreGraphics/CGColor.h>

并使用了像 CCGeometry.hccTypes.h 这样的 cocos 标头,因此标头没有 objective-C 代码,编译器不会与 nil 的提升版本混淆。

我的钱在类、枚举、枚举类或结构声明后的丢失;上:

struct AprilFool
{
}
// IMPAHTANT:
;
// END IMPAHTANT

包含此内容的文件具有什么文件扩展名?显示所有错误的来源是什么?

就编译器而言,标头不存在。它们仅编译源文件。任何编译的标头都有效地"复制到源文件中",就在 include 语句所在的位置。

因此,如果您从 .m 文件中包含此文件,它将编译为 .m (Objective-C)。无论标头是否具有后缀".hpp"。(如果你想了解更多,可以在一本关于C的好书中查找"编译单元",或者听NSBrief第113集,在那里我被要求解释Objective-C++:http://nsbrief.com/113-uli-kusterer/的所有事情)。

了解您拥有哪些内容也会有所帮助。此标头的包含是第一个吗?最后?给出错误的那个是下一个包含它之后吗?文件中是否有包含此内容的代码?如果您将其设置为最后一个包含,它是否有效,或者它只是在包含后的下一行出错?在一个标头末尾发生的错误,毕竟可以"溢出"到下一行,无论是由 include 语句复制粘贴的错误还是在同一标头中。