Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在同一命名空间中声明变量和函数是否会出错?[C+;+;]_C++_Namespaces - Fatal编程技术网

C++ 在同一命名空间中声明变量和函数是否会出错?[C+;+;]

C++ 在同一命名空间中声明变量和函数是否会出错?[C+;+;],c++,namespaces,C++,Namespaces,如果我创建了一个名称空间Mathy并使用另一个名称空间为Mathy的库,我会因为重新声明变量(如PI)或重新定义函数(如add)而出错吗 我这样问是因为如果我选择不使用名称空间,我会因为做这些事情而出错,对吗 如果我在使用名称空间时没有遇到错误,但在不使用名称空间时却遇到了错误,那么不使用名称空间不是更安全吗 谢谢您的时间。首先,名称空间必须是全局的,在不同的名称空间中可以有相同的函数或变量,但在相同的名称空间中不能有相同的变量声明两次 namespace A {

如果我创建了一个名称空间Mathy并使用另一个名称空间为Mathy的库,我会因为重新声明变量(如PI)或重新定义函数(如add)而出错吗

我这样问是因为如果我选择不使用名称空间,我会因为做这些事情而出错,对吗


如果我在使用名称空间时没有遇到错误,但在不使用名称空间时却遇到了错误,那么不使用名称空间不是更安全吗


谢谢您的时间。

首先,名称空间必须是
全局的
,在不同的
名称空间中
可以有相同的函数或变量,但在
相同的名称空间中
不能有相同的变量声明两次

    namespace A {
            int i=10;
            char i ='a';/** is not valid **/
            void print() {
             ...
            }
    }
    namespace B {
        float i = 1.5; /** valid **/
        void print() { /** valid **/
             ...
        }
    }

在上述示例中,在
名称空间A
B
中,分别有
i
int
类型和
i
float
类型,这是
有效的
但在
名称空间A
本身中,不能有不同类型的变量
i
(视为重新声明)决定自己测试它:

//in file testnamespace.h
namespace test
{
  int t = 1;
  void fooo(){};
}

//in file testnamespace2.h
namespace test
{
  int t=10000;
  void fooo(){int x = -2;}
}

//in file test.cpp
#include "testnamespace.h"
#include "testnamespace2.h"
int main()
{
  int ayyyeee = test::t;
  foo();
  return 0;
}
这会导致重新定义、多次初始化的错误


我一直在寻找

“不使用名称空间不是更安全吗”如果每个人都遵循这条准则怎么办?还要记住:ODR违规是不正确的;不需要诊断,所以要小心。回答你的标题问题,不,这会使
名称空间
s变得毫无意义。如果我有一个单独的文件,名称空间为{int I=-234;void print(){};},我会出错吗?(代码在一个单独的文件中)两个文件可以有相同的
名称空间
称为
a
,但在两个
名称空间
内,如果变量名称相同,则会出现类似多个定义的
错误