C++可以在多个头文件中重复定义同一名称的命名空间吗?

test_a.h中有定义:
namespace ns {
class a {...};
}
test_b.h中有定义:
namespace ns {
class b {...};
}
test_c.h中有定义:
namespace ns {
class c {...};
}
然后,在test_c.cpp中有如下代码片段:
#include "test_a.h"
#include "test_b.h"
#include "test_c.h"
using namespace ns;
对于命名空间是否会产生二义性?这样做的好处是什么?
(字体显示有问题,莫怪)

0
扫码支付0.1元 ×
其他相关推荐
c++ 多个头文件定义同一个namespace
存在两种情况:  1)名字空间名称相同,成员名字不同(其中成员名字指的是命名空间中的类,函数以及变量),那么他们会自动合并为一个名字空间,可以理解为追加  2)名字空间名称相同,成员名称相同。那么程序会在调试过程的link时报错。因为连接器会检测到重复定义的变量。
在同一个文件中定义多个命名空间
(PHP 5 >= 5.3.0, PHP 7) 也可以在同一个文件中定义多个命名空间。在同一个文件中定义多个命名空间有两种语法形式。 Example #1 定义多个命名空间,简单组合语法 <?php namespace MyProject; const CONNECT_OK = 1; class Connection { /* ... */ } function conne
命名空间namespace ,以及重复定义的问题解析
名字空间是用来划分冲突域的,把全局名字空间划分成几个小的名字空间。全局函数,全局变量,以及类的名字是在同一个全局名字空间中,有时为了防止命名冲突,会把这些名字放到不同的名字空间中去。 首先我们看一下名字空间的定义: 1 //MyLib.h文件 2 namespace MyLib{ 3 extern int i;//记住这是变量i的声明,不是i的定义 4 void fun(); 5 }/
包含同一头文件的多个源文件,声明并定义相同类,结构体的有趣问题
一个头文件,声明的函数、类型、结构体等,只能于一个源文件实现。 包含同一个头文件的多个源文件,不能定义相同名称的全局变量,即便类型不同也不可以。(但常量却可以)。 包含同一个头文件的多个源头件,可以分别在源文件中声明并定义类型、结构体,但不能申明并定义函数。但这却会导致一个有趣的问题,请看实例分析。 A.h 声明了3个函数,分别在B.cpp C.cpp D.cpp 中实现 /* *
[C++]命名空间不同的两个类,如何在头文件中做声明
原文作者:@玄冬Wong 问题是这样的,有两个类,且两个类所属命名空间不一样:   namespace NA { class A { } }   namespace NB { class B { } }     假设B类中有个A的成员变量,然后我们又不想在B类头文件中引用A类的头文件(为了加快编译速度)。 如果是两个都没有命名空间的类,那么好办...
解决重复包含一个头文件时变量重复定义的问题
#include文件的一个不利之处在于一个头文件可能会被多次包含,为了说明这种错误,考虑下面的代码: #include "x.h" #include "x.h" 显然,这里文件x.h被包含了两次,没有人会故意编写这样的代码。但是下面的代码: #include "a.h" #include "b.h" 看上去没什么问题。如果a.h和b.h都包含了一个头文件x.h。那么x.h在
C语言:解决多个C文件包含同一头文件引起的文件重复包含问题
解决多个C文件包含同一头文件引起的文件重复包含问题,并给出全局变量如何定义和声明的方法. 解决方法: 1. 定义公共文件: global.c 和global.h 其中, global.c文件中: #include &quot;global.h&quot; //定义全局变量 int global_num1,global_num2; //定义函数 int func(int input1 ,int inp...
C++中命名空间内只能声明函数,不能定义
C++命名空间是一个作用域的概念,而且是可以分割的作用域,不同于函数模块作用域{...},命名空间可以分在多个文件中定义,只要是属于统一名字空间的内容都拥有本命名空间的整体作用域,即本命名空间全体可见,不论是否在不同文件。 实验中试了一下,在命名空间内定义一个自己的函数,结果编译出错, namespace Ui { class MainWindow: public Ui_MainWind
同一函数多次定义同名静态变量问题
今天在做深圳茁壮网络公司的笔试题时遇到一个令我非常困惑的问题,在网上找了好久没有找到满意的答案,所以只好自己总结下,如果写得有错误,希望大家指出了,毕竟是新手,写得不好勿怪。   为什么可以在同一个函数内定义多次静态同名变量呢?这很违反我之前的认知,以为变量名就相当于我分配的这块地址的入口一样,定义3个同名变量不会搞出大事吗?编译器还不报错,无语..... 我加了很多的printf来测试,发...
自定义函数名和命名空间存在的函数名同名的解决方法
今天自己写了一个名字为findContours的函数 结果opencv本身有同名的函数, 调用该函数时编译器不识别我自己写的函数,总是默认opencv中的函数 现在还不知道为啥 目前的解决方法是在b.h文件中新建一个MarkerDetector的类,并声明其方法 在.cpp中实现其方法, 在Main.h中定义该类的对象,用对象.方法去调用该函数 是不是可以自己写一个命名空间,
C++学习小疑问:类的名称能否和命名空间的名称相同?
对于类的名称能否和命名空间名称相同。我们可以看如下的实例: 定义命名空间和类名称相同: //name.h #pragma once namespace li { class li { public : void cotestout(); }; }//name.cpp #include #include "name\name.h" using namespace std; void
头文件的重复包含和变量的重复定义
转载至:点击打开链接 在c或c++中,头文件重复包含问题是程序员必须避免的问题,也是很多新手容易犯错的问题。 为什么要避免头文件重复包含呢?        1.我们知道在编译c或c++程序时候,编译器首先要对程序进行预处理,预处理其中一项工作便是将你源程序中#include的头文件完整的展开,如果你有意或无意的多次包含相同的头文件,会导致编译器在后面的编译步骤多次编译该头文件,工程代码量小还
解决全局变量命名空间变量名重复冲突(技巧)
解决全局变量命名空间变量名重复冲突(技巧) 只在函数里面声明变量。虽然有时候也不是绝对可行,但是函数级作用域可以防止其本地变量跟其他变量发生冲突。 只声明一个全局对象,然后把本来想作为全局变量的值都作为这个对象的属性。 var Vis = {}; //声明空的全局对象 Vis.id = 1; Vis.name = 'dashuaibi'; // 这样所有的变量都被关在了全局对象Vis里...
c++多个源文件共用一个全局变量(extern 的用法)(
 本文转自:http://blog.sina.com.cn/s/blog_74a459380101rjh4.html 例子: 头文件:state.h    源文件:state.cpp         其它源文件:t1.cpp   t2.cpp  t3.cpp,  这些源文件都包含头文件state.h。 需要定义一个全局变量供这些源文件中使用:方法如下 1、在 state.h
头文件的包含以及命名空间的引入尽量写在cpp里
菜鸟编程需要知道的规范。 1,
头文件里面实现一个函数,在两个cpp中包含,则重复定义,如果加上inline则不会报错
为什么类的定义应当写在头文件中,从而被多个源文件包含?比如myclass.h定义了一个类myclass(只定义类,不定义成员函数), file1.cpp里#include "myclass.h",编译得到file1.obj; file2.cpp里也#include "myclass.h",编译得到file2.obj; 那么把file1.obj和file2.obj(和运行库)连接起来生成可执行文件的
C/C++中头文件重复包含和变量重复定义
在头文件重复包含和变量重复定义的错误提示中多半会包含这样一个单词----redefinition一、如何避免头文件重复包含1. 为何要避免头文件重复包含的原因?在编译c或c++程序时候,编译器首先要对程序进行预处理,预处理其中一项工作便是将你源程序中#include的头文件完整的展开,如果你有意或无意的多次包含相同的头文件,会导致编译器在后面的编译步骤多次编译该头文件,工程代码量小还好,工程量一大...
多文件中函数的重复定义
简单来说,首先,头文件被include到相应的cpp文件中,然后,将cpp编译生成obj文件,然后将obj文件连接生成exe文件。 所以,由上面的编译过程,要注意以下几点: 1.include的应该是头文件,不要include进cpp文件,因为如果如此,include进的cpp文件会在main文件中编译生成obj,其本身的cpp文件也会生成obj,当二者链接后,cpp中定义的函数全部会出现重复
全局变量可不可以定义在可被多个.C文件包含的头文件中?
全局变量可不可以定义在可被多个.C文件包含的头文件中? 原文链接  http://hi.baidu.com/fukai5/blog/item/dbf102fd705836e7fd037ff2.html 最近在学习uC/OS操作系统,对其中定义的全局变量产生了好奇。作者
头文件被多次包含的解决办法
文件的一个不利之处在于一个头文件可能会被多次包含,为了说 明这种错误,考虑下面的代码: #include&quot;x.h&quot;  #include&quot;x.h&quot;  显然,这里文件x.h被包含了两次,没有人会故意编写这样的代码。但是 下面的代码: #include&quot;a.h&quot;  #include&quot;b.h&quot;  看上去没什么问题。如果a.h和b.h都包含了一个头文件x.h。那么x.h 在此也同样被包含了两次,只不过它的形...
头文件被多次调用时的解决办法
单片机编程中有时会出现头文件多次调用,编译时导致结构体函数被重复定义的错误以STM3210X为例当头文件stm32f10x.h被多次调用时,会出现函数体被多次定义的错误,此时在头文件中添加#ifndef __STM32F10X_H#define __STM32F10X_H此处为头文件内容#endif   /* __STM32F10X_H */此方法可以很好的解决头文件被多次调用时出现的重复定义错误...
头文件中写类的实现出现函数重复定义的问题
先来做一个实验,你在一个头文件中定义一个类,然后把内中的一个函数的实现写在这个头文件当中。 //A_test.h #ifndefine _A_TEST_ #define _A_TEST_ class A { void test(); }; void A::test() { } #endif //A_test.cpp #include A_test.h //B_t
命名空间及匿名命名空间
把命名空间单独提出来描述是因为:命名空间的功能几乎和前缀是一致的。 1.       使用命名空间的必要性           在一个大的项目中,当多时合作时,多个人编写的库头文件中,不可以避免的存在变量名相同的冲突,特别都是作为全局变量存在的时候,这种冲突就更为明显,如何解决这种冲突?方法就是使用命名空间。           比如说,每个人所定义的变量,都以他自己的名字的缩写为前缀,假如...
C++中inline函数的定义可放在头文件中,inline 函数重复出现不会导致连接错误,
附:http://blog.csdn.net/yingxunren/archive/2009/10/13/4663014.aspxinline   可以放在   .cpp   中,但此时只有本   cpp   文件可以用它         如果要做成公用的,就必须放在   .h   中,如果不想放在   .h   中,就必须每个   cpp   文件拷贝一份。         其实,即使放在 
第三方C代码移植过程中的typedef重复定义问题
楔子: 本文主要描述了把第三方代码移植到某一目标平台过程中所发生的typedef重复定义的问题。之所以要写这个问题,原因有三:1>这个问题是一个移植代码过程中经常遇到的老大难问题2>我还没有完全(或者说完美的)解决这个问题3>想得到诸位高手的点拨。 首先要看看下面的原
多个文件使用同一全局变量(未初始化) 以及局部变量重复定义
如果是多个文件中同一变量,是由C语言编译器中的linker解决的。首先,要编译的文件中的符号(函数名,全局变量名)分为weak和strong类型。weak symbol:未初始化的全局变量strong symbol:函数名,初始化的全局变量linker解决按3条规则解决此问题1,多个相同名称的strong symbol是不被允许的2,一个strong symbol和多个weak symbol相同,...
mybatis命名空间namespace注意
namespace 是什么呢?是不是 C# 中的命名空间呢? 其实不是的,这个命名空间与映射文件中的 statements 中配置的 SQL 语句的 id 有关。 在大型项目中,可能存在大量的 SQL 语句,这时候,为每个 SQL 语句起一个唯一的标识 id 就变得并不容易了。为了解决这个问题,在 mybatis 中,可以为每个映射文件起一个唯一的命名空间,这样,定义在这个映射文件中的每个 S
如何解决头文件重复包含和宏的重复定义问题:用#ifndef 、#define、#endif
如何解决头文件重复含问题   #ifndef 、#define、#endif的作用是: (1)防止宏的重复定义 (2)防止有文件的重复包含 #ifndef _A_H_ #define _A_H_ 。。。。。 #endif  ...
使用define定义命名空间
=== 使用define定义命名空间 #include &amp;amp;lt;stdio.h&amp;amp;gt; #define MSG(sym) msg_ ## sym //提供命名空间 struct MSG(BoardConfiguration){ int num; const char *name; }; struct MSG(HostConfiguration){ int nu...
头文件重复包含和变量重复定义
在c或c++中,头文件重复包含问题是程序员必须避免的问题,也是很多新手容易犯错的问题。 为什么要避免头文件重复包含呢?        1.我们知道在编译c或c++程序时候,编译器首先要对程序进行预处理,预处理其中一项工作便是将你源程序中#include的头文件完整的展开,如果你有意或无意的多次包含相同的头文件,会导致编译器在后面的编译步骤多次编译该头文件,工程代码量小还好,工程量一大会使整个项
C++多个文件共享同一头文件时全局变量的声明
在文件过多的情况下,由于每个程序都会包含自己的头文件,在编译过程中,很有可能一个头文件被包含了多次,这时,进行编译会发生重复编译的错误。通过以上两步就可以实现多个文件中共享同一头文件时的全局变量声明
C++中运用命名空间(namespace)解决相同命名不同值的方法
#include&amp;lt;iostream&amp;gt; using namespace :: std; namespace One{ int M = 200; int inf = 10; } namespace Two{ int x; int inf = 100; } int main() { One :: inf *= 1; cout &amp;lt;&amp;...
在项目中,多次声明函数的好处
有些时候,一些函数已经包含在头文件中,但是我曾经看到一份源代码,依然在开头采用extern的方式,再次声明了一些实际使用到的函数,这种方式的好处是什么? 仔细想了想, 第一、可以防止某些头文件中漏掉包含一些函数的声明 第二、这种方式使源代码更加清晰,特别是在庞大的工程中,更加有利于源代码的阅读。 第三、有利于组内不同人之间,实时的调整接口,等待模块写好之后,再将需要开放的接口一并写
(笔记)什么是命名空间 为什么C++头文件有的要加.h有的不用加.h
引言: 问题:学习过C,然后再学c++的人可能会这么问,我#include之后,不就是把头文件拉进来了吗,而cin cout等函数不就是iostream.h里面的函数吗,我使用cin cout时,编译器为什么会说  “Error 未定义标示符”呢? 解决方法:这样写 #include using namespace std; void main() {
C/C++由于头文件重复引入引起的成员或类重复定义的解决办法
报错信息: ../src/Circle.h:10:14: error: redefinition of 'PI' const double PI=3.14159;              ^ ../src/Circle.h:10:14: note: previous definition is here const double PI=3.14159;   
C++命名空间里面定义变量出现重定义错误
代码: head.h:#include <iostream>namespace mySpace { class Out { public : void print(); private : protected : }; Out o;//这里定义的变量 namespace mySpace_Inner {
C++中namespace跨多个文件的问题
在C++14标准中(我使用的是最接近的working draft, N3797),在"7.3 Namespaces"中,关于namespace有一句话,“Unlike other declarative regions, the definition of a namespace can be split over several parts of one or more translation
怎样防止头文件被重复包含?(两种方式)以及它的影响
一、头文件被重复包含 #include文件的一 个不利之处在于一个头文件可能会被多次包含,为了说明这种错误,考虑下面的代码: #include "x.h" #include "x.h" 显然,这里文件x.h被包含了两次,没有人会故意编写这样的代码。但是下面的代码: #include "a.h" #include "b.h" 看上去没什么问题。如果a.h和b.h
GCC/LD编译链接潜规则 (第三弹) : 当项目库中包含多个同名的头文件时.
gcc在寻找头文件时, 会按照一定的顺序在很多个目录挨个寻找, 一旦找到一个即停止寻找. 如果项目中存在多个同名的头文件, 则以第一个为准, 后面的直接忽略. 这个特性会导致很多编译不通过的问题! GCC的寻找依赖的头文件顺序为: (这里已a.h为例) 1) 优先在使用了#include ”a.h” 的文件所在的目录寻找a.h 2) 在GCC通过 –I 指定的包含路径中从左到右找.
C++学习笔记(1):命名空间与头文件
C++命名空间与头文件
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 python可以培训吗 云计算可以学吗