我尝试了以下程序。

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调用?

请提供输入。

最佳答案

由于名称改写,您无法从C调用C++(并且在使用Objective时使用相同的原理),C++对您的符号做了某些操作以允许重载。

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

请注意,C / ObjC方面不喜欢extern "C"表示法,因此您的头文件需要解决这个问题(也许通过#ifdef __cplusplus)。

关于c++ - 无法从 objective-c 调用在Objective-C++中定义的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17189206/

10-11 22:47
查看更多