当前位置: 首页 > news >正文

【C++】关于using namepace xxx 使用命名空间和冲突

官方定义

namespace是指 标识符的各种可见范围。命名空间用关键字namespace来定义。 命名空间是C++的一种机制,用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。

基本使用

编译及执行命令:

g++ test.cpp -o test
./test

以最简单的输入(cin)输出(cout)流为例:

#include<iostream>int main() {std::cout << "testing" << std::endl;
}

如果加上使用命名空间,代码则可简化为:

#include<iostream>using namespace std;int main() {cout << "testing" << endl;
}

遇到的冲突问题

现在我在改EzPC(一个非常大的基于C++的隐私计算框架),希望加上armadillo库以更好地支持复杂的矩阵运算。

在这里插入图片描述

加上这两行后,开始编译,于是出现了如下的一大堆报错:

在这里插入图片描述

在这里插入图片描述

分析上面的报错信息,大概可以知道问题在于:armadillo库和原框架中的MathFunctions中都存在同样的math函数,导致编译过程中,编译器不知道math->ReLU这类操作调用的哪个math。所以,上面也报错说“ambiguous(含糊不清的)”。

冲突解决

我这里采用的最简单的方法解决这个命名冲突,直接不对armadillo库使用命名空间,这样就不存在“调math时不清楚是arma中的math还是原框架中另一个库的math”这个问题了。

在这里插入图片描述

也就是说,我在代码中使用armadillo时(比如调用cube类),不能直接写成:

cube x = cube(1, 2, 3)

而应该写成完整形式:

arma::cube x = arma::cube(1, 2, 3)

测试一下,编译通过!
再测试一下armadillo能否顺利使用:

std::cout << "convert array to cube" << std::endl;
// arma::cube image = arma::cube(H, W, C);
arma::cube image = arma::cube(1, 2, 3);
std::cout << image << std::endl;

在这里插入图片描述

没有问题,bingo

http://www.lryc.cn/news/150171.html

相关文章:

  • Linux常用命令——cupsenable命令
  • 基于Stable Diffusion的AIGC服饰穿搭实践
  • 【 ARMv9 Cluster BUS QoS 配置】
  • 简单了解网络基本概念
  • 网络安全知识库
  • 无涯教程-JavaScript - FLOOR函数
  • 【LeetCode-中等题】146. LRU 缓存
  • 表白墙程序
  • git 本地仓库关联到远程仓库
  • Introducing Language Guidance in Prompt-based Continual Learning
  • Matlab(数值微积分)
  • 【数据结构回顾】
  • QT创建可移动点类
  • Flutter启动页
  • 读word模板批量生成制式文件
  • Node.js crypto模块 加密算法
  • Win11 避坑安装WSL2 Ubuntu22.04
  • ESP8266+继电器+MQTT+VUE 实现远程开关灯
  • Android中级——四大组件工作过程
  • 【RabbitMQ】RabbitMQ 服务无法启动。系统出错。发生系统错误 1067。进程意外终止。
  • 如何理解attention中的Q、K、V?
  • Redis----取代RabbitMq 和 Kafka的解决方案
  • 动态规划之连续乘积最大子数组 连续和最大子数组
  • keil在点击debug无法运行(全速运行)
  • go语言-协程
  • 如何伪造http头,让后端认为是本地访问
  • 视频剪辑音效处理软件有哪些?视频剪辑软件那个好用
  • 搭建STM32F407的Freertos系统(基于STM32CubeMX)
  • vite 配置自动补全文件的后缀名
  • 基于Spring Boot的人才公寓管理系统设计与实现(Java+spring boot+MySQL)