.m文件导入C++头文件带来的错误

本文记录了一次Objective-C项目中引入C++代码时出现的命名空间识别错误及解决方案。通过将.m文件改为.mm文件,成功实现了OC与C++的混编。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天的工作挖了不少的坑,遇到了各种千奇百怪的错误,现在好好总结一下。

新建一个工程,然后新建HelloCPP.h,HelloCPP.cpp文件,HelloCPP.h文件内容如下:

#ifndef __CPPWrong__HelloCPP__
#define __CPPWrong__HelloCPP__

//#include <stdio.h>

namespace hello
{
    
};

#endif /* defined(__CPPWrong__HelloCPP__) 

就一个空的namespace。


然后在ViewController.m中导入HelloCPP.h,如下:

#import "ViewController.h"

// 导入C++头文件
#import "HelloCPP.h"

@interface ViewController ()

@end

@implementation ViewController
            
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

接着Run,报错,提示如下:


被导入的C++头文件无法识别其命名空间。


解决方法:

通常在工程中,如果遇到在OC中使用C++代码运行异常的问题,是因为其中的C++头文件被一个OC .m文件引用了。为了实现OC和C++混编,必须要将引用的.m文件后缀修改为.mm



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值