-3

我有一个关于为 c++ 编写目标 C 包装器的问题。当我尝试构建它时,这是我的代码中的错误。我不确定我做错了什么。非常感谢任何帮助或指导。以下是我编写的示例代码:

///Print.h///
int test1();

///Print.cpp///

int test1()
{
    printf ("hello man\n");
}

///cppWrapper.h///

struct Print;

typedef struct Print Print;

@interface cppWrapper : NSObject
{
    Print *print;
}
@property (nonatomic, assign) Print *print;

-(id)init;

-(int)runTest;

///cppWrapper.mm///

#import "cppWrapper.h"

@implementation cppWrapper

@synthesize print = _print;

- (id)init
{
    self = [super init];

    if (self)
    {
        _print = new Print(); //error occurred here. 
    }

    return self;
}

-(int)runTest
{
    self.print->test1();
}
4

1 回答 1

0

C++ 的 Objective-C 包装器不是根据 Objective-C 代码实现的。

要实现它,请使用纯 C 函数。

在纯 C 函数下,实现 Objective-C 代码。在 C++ 代码中,使用 C 函数调用 Objective-C 代码。

Objective-C 不理解 C++。

而是使用 Objective-C++ 来使用 C++ 代码。

在 Objective-C++ 中,您可以使用 C++ 代码。将文件另存为 .mm 而不是 .m。

编辑:

您的代码中的错误是因为编译器无法找到结构的定义。编译器需要知道结构的大小。没有它的定义,它就不能创建对象。即使您在堆栈上创建对象也是如此。

于 2013-11-06T03:42:24.790 回答