C++ C++;和目标C

C++ C++;和目标C,c++,objective-c,C++,Objective C,我需要在我的项目中使用C++文件,它被称为“代码> CAXExpEx.HPP < /C>”,并且在项目目标中“编译源代码”——“根据文件类型”而不是ObjuleC++。但在编译时,它总是显示我的错误error:expected'=',',',',',;','“CAXException”之前的asm或“属性” 代码: class-CAXException//class-CAXException///class-CAXException//该标头可能包含在objective-c(.m扩展名)源代码文

我需要在我的项目中使用C++文件,它被称为“代码> CAXExpEx.HPP < /C>”,并且在项目目标中“编译源代码”——“根据文件类型”而不是ObjuleC++。但在编译时,它总是显示我的错误
error:expected'=',',',',',;','“CAXException”之前的asm或“属性”
代码:


class-CAXException//
class-CAXException///
class-CAXException//该标头可能包含在objective-c(.m扩展名)源代码文件中。包含该头的源代码文件必须是目标C++,即以.mm结尾,或者可以通过显式地更改“编译源为…”设置来强制目标C++。 该头可能来自objective-c(.m扩展名)源代码文件。包含该头的源代码文件必须是目标C++,即以.mm结尾,或者可以通过显式地更改“编译源为…”设置来强制目标C++。

> P>如果我正确理解,你有一个C++头文件(<代码> .HPP<代码>),你想从Objto-C文件中包含。不幸的是,你不能直接这么做。你必须使用变通方法

<>最简单的是改变包含C++的头文件(直接或间接)编译为Objul-C++文件的每个Objy-C文件()的编译选项。这可以通过将文件重命名为
.mm
扩展名或更改文件编译器的选项来完成

如果这项工作对你来说,这将是最容易的,但是ObjuleC++不是ObjuleC的完整超集(因为C++不是C的超集),而一些有效的Objy-C是无效的ObjultC++(如果C++关键字用作变量名)。

如果发生这种情况,您必须创建ObjuleC包装器,并用ObjtoVC++将其简单地委托给C++类。即创建一个

CAXExceptionWrapper.h
Objective-C文件,其中包含以下内容:

@interface CAXExceptionWrapper {
  @private
    void* _CAXExceptionImpl;
}
- (id)init;
// ...
@end
以及一个'CAXExceptionWrapper.mm'Objective-C++文件,其中包含:

@import "CAXException.hpp"
@implementation CAXExceptionWrapper
- (id)init {
    if ((self = [super init])) {
        _CAXException = new CAXExceptionWrapper;
    }
    return self;
}
// ...
@end

然后在Objto-C文件中,包含包装对象Objy-C头,而不是C++头。

< P>如果我正确理解,你有一个C++头文件(<代码> .HPP<代码> >),你想从Objut-C文件中包含。不幸的是,你不能直接这么做。你必须使用变通方法

<>最简单的是改变包含C++的头文件(直接或间接)编译为Objul-C++文件的每个Objy-C文件()的编译选项。这可以通过将文件重命名为
.mm
扩展名或更改文件编译器的选项来完成

如果这项工作对你来说,这将是最容易的,但是ObjuleC++不是ObjuleC的完整超集(因为C++不是C的超集),而一些有效的Objy-C是无效的ObjultC++(如果C++关键字用作变量名)。

如果发生这种情况,您必须创建ObjuleC包装器,并用ObjtoVC++将其简单地委托给C++类。即创建一个

CAXExceptionWrapper.h
Objective-C文件,其中包含以下内容:

@interface CAXExceptionWrapper {
  @private
    void* _CAXExceptionImpl;
}
- (id)init;
// ...
@end
以及一个'CAXExceptionWrapper.mm'Objective-C++文件,其中包含:

@import "CAXException.hpp"
@implementation CAXExceptionWrapper
- (id)init {
    if ((self = [super init])) {
        _CAXException = new CAXExceptionWrapper;
    }
    return self;
}
// ...
@end

然后在Objto-C文件中,包含包装对象Objy-C头,而不是C++头。

@ MZDER,错误在这行之前。很可能您还缺少一个
在上面声明的一个类的末尾。当我在项目目标中设置“将源代码编译为”-“Objective C++”时,这个文件编译正常,其他文件(facebook connect和twitter库)中大约有100个其他错误刚刚修复了这个问题,
#从头文件(.h)导入
)无法声明它必须在
.mm
文件中。@Madder错误在该行之前。很可能您还缺少一个
在上面声明的一个类的末尾。当我在项目目标中设置“将源代码编译为”-“Objective C++”时,这个文件编译正常,其他文件(facebook connect和twitter库)中大约有100个其他错误刚刚修复了这个问题,
#从头文件(.h)导入
)无法声明它必须位于
.mm
文件中。有很多关于使用C++和目标C++所需要做的信息,并且在同一页上的其他答案也非常有帮助——不管评论中的火焰战争是哪一个,目标C还是C++?如果遵循惯例,H.pp文件被作为一个头文件包含在另一个翻译单元中。请编辑您的问题,告诉我们更多关于该文件:是C,C++,Objto-C,还是ObjuleC++?如何包含.hpp文件?有很多关于使用C++和目标C++所需要做的信息,并且在同一页上的其他答案也非常有帮助——不管评论中的火焰战争是哪一个,目标C还是C++?如果遵循惯例,H.pp文件被作为一个头文件包含在另一个翻译单元中。请编辑您的问题,告诉我们更多关于该文件:是C,C++,Objto-C,还是ObjuleC++?如何包含.hpp文件?