我尝试了以下程序。
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/