1

我尝试了以下程序。

wc.h

int add(int, int);
int del (int, int);

wc.mm

int add(int x, int y)
{
    NSLog (@"Inside Wrapper Add");
}

int del( int x, int y)
{
   NSLog (@"Inside Wrapper Multiply");

}

在 AppDelegate.m

1) 包括 wc.h

2) 调用 add(20,30);

我看到编译错误'未知类型名称'NSString'。

我的理解是什么。

1)我正在尝试混合C++和Objective C。也就是说,从Objective C调用C++。

2)找到了两种实现方式::

  1) Through Opaque Pointer ( PIMPL), Some how i achieve it through. 

  2) Using .mm ie: objective-C++ Source type which can be used to invoke pure C++.

我的问题是什么?

.mm [Objective-C++] 定义了一个函数,为什么我不能从 Objective-C 调用?

请提供输入。

4

1 回答 1

2

由于名称修改,您无法从 C 调用 C++(当它是 Objective 时也适用相同的原则),C++ 对您的符号执行某些操作以启用重载。

例如,如果您声明extern "C" int add(int, int);,则声明此 C++ 函数需要可由 C 调用,因此不会发生名称修改(也不会发生重载)。

请注意,C/ObjC 方面不喜欢这种extern "C"表示法,因此您的头文件需要考虑这一点(可能通过#ifdef __cplusplus)。

于 2013-06-19T10:52:20.557 回答