最近,在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和之前版本,接口函数上的写法上有些区别。

//
// 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下Object C和C++混合编译相关推荐

  1. ios:在XCode下混合编译C++/Objective-C

    先说题外话,文章标题其实起的不好,在iOS的开发中,Apple建立的库基本都是用Objective-C写的,所以在这里的C++指的其实是Objective-C++. 首先,最最最要紧的事情,不是代码而 ...

  2. Linux下c和cuda混合编译,并生成动态链接库.so和使用

    Linux下c和cuda混合编译,并生成动态链接库.so和使用 2016-08-27 14:27 98人阅读 评论(0) 收藏 举报 分类: Linux 版权声明:本文为博主原创文章,未经博主允许不得 ...

  3. Android N混合编译与对热补丁影响深度解析

    大约在六月底,Tinker在微信全量上线了一个补丁版本,随即华为反馈在Android N上微信无法启动.冷汗冒一地,Android N又搞了什么东东?为什么与instant run保持一致的补丁方式也 ...

  4. VS2005混合编译ARM汇编代码

    2019独角兽企业重金招聘Python工程师标准>>> 在开发过程中,发现简单的在Storage Memory区域拷贝或粘贴文件不能达到硬件量测的要求,需要直接通过编写ARM汇编指令 ...

  5. Android N混合编译与对热补丁影响解析

    首先非常抱歉Tinker没有按期内测,这主要因为开源的代码需要通过公司内部审核与评测,这项工作大约还需要一个月左右.当前Tinker已经在公司内部开源,我们会努力让它以更完善的姿态与大家见面. 大约在 ...

  6. Objective-C和C/C++混合编译

    在iOS开发过程中,Objective-C的代码有时需要调用C/C++代码,本篇文章介绍Objective-C如何混合编译C/C++. Xcode新建一个工程,选择macOS选项下面的Command ...

  7. (0038) iOS 开发之Xcode下的DerivedData文件

    Xcode下的DerivedData文件 长时间没清理:吃了大量硬盘.删除了之后,运行:CleanMyMac 竟然有50G啊!清除,爽啊! 一大早就跑过来删除xcode的垃圾文件,如果你很久没有删除x ...

  8. 华为鸿蒙OS发布!余承东:随时可替换安卓;方舟编译器将支持混合编译

    乾明 边策 郭一璞 发自 凹非寺  量子位 报道 | 公众号 QbitAI 千呼万唤始出来,华为鸿蒙操作系统,今日正式发布. 英文名HarmonyOS,寓意为和谐. 并不像亿万行代码的安卓那样笨重,鸿 ...

  9. makefile多目录的.c 格式.cpp混合编译

    原文地址:http://blog.csdn.net/yangbingzhou/article/details/50218315 [cpp] view plaincopyprint? # # c.cpp ...

最新文章

  1. 《未来企业效率白皮书》
  2. 批处理中setlocal enabledelayedexpansion
  3. 使用 Eigen 库写第一个程序
  4. 从CNN视角看在自然语言处理上的应用
  5. 使用阿里云docker加速器
  6. 系统中多种隐藏超级用户方法
  7. 微信文章互阅python脚本,一天可刷120分
  8. 伺服速度控制模式接线图_伺服驱动器速度控制模式的接线方式及注意事项
  9. 用户访谈与问卷调查怎么做
  10. 在DW中制作网页中的表单
  11. vue组件中ctrl键和shift键操作多选
  12. tomcat连接超时
  13. 分享美团、字节、腾讯,java从入门到精通第四版光盘下载
  14. 数据库系统——数据库物理存储
  15. Process and Thread
  16. .net软件工程师面试
  17. 基于案例的软件构造教程第二章课后题答案
  18. LabVIEW从命令行运行VI
  19. 双曲抛物面z=xy俗称马鞍面-高数学习笔记(1)
  20. 直播平台搭建源码,uniapp progress进度条

热门文章

  1. SQLSever期末考试作业复习卷一
  2. 【选型】CC2530F256方案简介
  3. 求助!利用pycharm爬取拉勾网Python相关职位招聘信息,报错json.decoder.JSONDecodeError
  4. 记录nltk的stem操作
  5. 【RED-V】驱动 PWM 实现呼吸灯
  6. 中国文化及相关产业统计年鉴(2013-2022)
  7. 用3DS MAX和PHOTOSHOP制作机器人----作者: Egbert Tjong 来源: 火星时代
  8. MICCAI Proceedings(MICCAI会议论文)的TEX模板下载
  9. HTML第三耍 图像标签
  10. 【转】很全的英语短语