XCode下Object C和C++混合编译
2017-12-09 21:27
375 查看
最近,在iOS上调试一个App,核心代码是用C++实现的,App界面使用Object C实现,在XCode下混合编译 C++/Object-C遇到的问题总结一下:
1. 文件格式问题,C++里的.h和.cpp,需要将.cpp改写为.m格式;
2.接口函数:用NSObject封装c++类;
3.混合编译之前一定要把编译器的Compile Sources As选项改为Objective C++;
4.读取txt文件:
filePath = [[NSBundle mainBundle] pathForResource:@"templates" ofType:@"xml"];
NSData *myData = [NSData dataWithContentsOfFile:filePath];
5.OS10和之前版本,接口函数上的写法上有些区别。
Object C和C++适配函数:Xcode下创建新的.h和.mm文件。
.mm文件
最后,在App main.mm文件,添加测试语句:
Xcode生成iOS APP里,Object C读取txt文件,需要采用OC读取方法:
OK ,上述是调试iOS App,针对Objective-C和C++混合编程遇到的问题。
解决了接口问题,接下来,就是完善核心代码和iOS界面设计等问题了。
--------------------------------------------------------------------------------------------------------
新的问题,数字和汉字之间的映射关系。比如,地铁路线,我们采用数字编号,用户界面需要输入的是站名(汉字)。
比较通用的方法,是数据库,还有,就是利用强大的iOS数据结构了。
参考文章:
https://www.cnblogs.com/biosli/archive/2011/04/30/Mixing_ObjectiveC_and_Cplusplus_in_iPhone_Development.html
1. 文件格式问题,C++里的.h和.cpp,需要将.cpp改写为.m格式;
2.接口函数:用NSObject封装c++类;
3.混合编译之前一定要把编译器的Compile Sources As选项改为Objective C++;
4.读取txt文件:
filePath = [[NSBundle mainBundle] pathForResource:@"templates" ofType:@"xml"];
NSData *myData = [NSData dataWithContentsOfFile:filePath];
5.OS10和之前版本,接口函数上的写法上有些区别。
// // Created by wang on 11/6/16. // // MixCompileTest Object C 和 C++ // #ifndef GRAPH_SPARSEGRAPH_H #define GRAPH_SPARSEGRAPH_H #include <iostream> #include <vector> #include <cassert> using namespace std; // 稀疏图 - 邻接表 class SparseGraph { private: int n, m; // 节点数和边数 bool directed; // 是否为有向图 vector<vector<int>> g; // 图的具体数据 public: // 构造函数 SparseGraph(int n, bool directed) { assert(n >= 0); this->n = n; this->m = 0; // 初始化没有任何边 this->directed = directed; // g初始化为n个空的vector, 表示每一个g[i]都为空, 即没有任和边 g = vector<vector<int>>(n, vector<int>()); } ~SparseGraph() { } // 向图中添加一个边 void addEdge(int v, int w) { assert(v >= 0 && v < n); assert(w >= 0 && w < n); g[v].push_back(w); if (v != w && !directed) g[w].push_back(v); m++; } // 验证图中是否有从v到w的边 bool hasEdge(int v, int w) { assert(v >= 0 && v < n); assert(w >= 0 && w < n); for (int i = 0; i < g[v].size(); i++) if (g[v][i] == w) return true; return false; } // 显示图的信息 void show() { for (int i = 0; i < n; i++) { cout << "vertex " << i << ":\t"; for (int j = 0; j < g[i].size(); j++) cout << g[i][j] << "\t"; cout << endl; } } }; #endif //GRAPH_SPARSEGRAPH_H
Object C和C++适配函数:Xcode下创建新的.h和.mm文件。
// // ObjectiveCAdaptor.h // MixCompileTest // // Created by wang on 11-4-17. // #import <Foundation/Foundation.h> class SparseGraph; //这个声明得小心,千万不要写成@class //-- new @interface ObjectiveCAdaptor : NSObject { - (void) objectiveFunc; @end
.mm文件
// // ObjectiveCAdaptor.m // MixCompileTest // // Created by wang on 11-4-17 // #import "ObjectiveCAdaptor.h" #include "SparseGraph.h" //---new @implementation ObjectiveCAdaptor{ SparseGraph* testObj; } - (id) init { if (self = [super init]) { testObj = new SparseGraph(); } return self; } - (void) dealloc { if (testObj != NULL) { delete testObj; testObj = NULL; } [super dealloc]; } - (void) objectiveFunc { testObj->show(); testObj->hasEdge(4, 7); } @end
最后,在App main.mm文件,添加测试语句:
//调用示例: - (void) callObjectiveCAdaptorMethod { ObjectiveCAdaptor *testObjectiveCObj = [[ObjectiveCAdaptor alloc] init]; [testObjectiveCObj objectiveFunc]; }
Xcode生成iOS APP里,Object C读取txt文件,需要采用OC读取方法:
NSString *xmlFilePath = [[NSBundle mainBundle] pathForResource:@"Demo.txt" ofType:nil]; NSData *xmlData = [NSData dataWithContentsOfFile:xmlFilePath];
OK ,上述是调试iOS App,针对Objective-C和C++混合编程遇到的问题。
解决了接口问题,接下来,就是完善核心代码和iOS界面设计等问题了。
--------------------------------------------------------------------------------------------------------
新的问题,数字和汉字之间的映射关系。比如,地铁路线,我们采用数字编号,用户界面需要输入的是站名(汉字)。
比较通用的方法,是数据库,还有,就是利用强大的iOS数据结构了。
参考文章:
https://www.cnblogs.com/biosli/archive/2011/04/30/Mixing_ObjectiveC_and_Cplusplus_in_iPhone_Development.html
相关文章推荐
- Xcode中C++ / Objective-C 混合编译
- c++ 和c的混合编译
- Xcode 6.3 c++ std library 编译错误
- C 和 C++ 混合代码 cmath编译出错
- 关于C和C++混合编译出错的解决方法
- ios学习--XCode添加lib库(c/c++编译,采用gcc)
- VS2010中CUDA和C++混合编译(两种方式)
- 一些算法的代码练习(c++实现,编译环境xcode)
- 解决Visual C++ 混合编译C和C++文件时的错误fatal error C1853
- mac os下通过命令行的方式编译c++代码并在xcode里引用
- C和C++文件混合编译
- GCC编译C C++ 和C混合C++
- MFC工程中使用sqlite3源代码--c和c++代码混合编译出错解决
- iPhone开发中,在XCode下混合编译 C++/Objective-C
- VS2013中CUDA和C++混合编译(两种方式)
- 混合编译:c++文件调用c文件变量和函数、c文件调用c++文件变量和函数
- C和C++混合编译
- CMake混合编译C/C++与object-C
- “#ifdef __cplusplus extern "C" { #endif”的定义(c/c++混合编译)
- c和c++文件混合编译