如何使用名称空间和类? 对不起,如果这是一个愚蠢的问题,但我正在学习C++(我通常用C语言编码),我不知道如何使用命名空间和类。它们是否必须在头文件中声明?如何在命名空间中声明函数?假设我正在处理一个包含不同文件的大型项目。我在一个文件中定义了一个名称空间,但是我想在同一个名称空间中添加更多的函数,但是这些函数是在另一个文件中定义的。那能做到吗?例如:

如何使用名称空间和类? 对不起,如果这是一个愚蠢的问题,但我正在学习C++(我通常用C语言编码),我不知道如何使用命名空间和类。它们是否必须在头文件中声明?如何在命名空间中声明函数?假设我正在处理一个包含不同文件的大型项目。我在一个文件中定义了一个名称空间,但是我想在同一个名称空间中添加更多的函数,但是这些函数是在另一个文件中定义的。那能做到吗?例如:,c++,namespaces,C++,Namespaces,file1.cpp namespace Example { int vartest; void foo(); } int othervar; void otherfoo(); // How can I add this and othervar to the Example namespace? namespace Example { int vartest; void foo(); } namespace Example { int othervar;

file1.cpp

namespace Example {
   int vartest;
   void foo();
}
int othervar;
void otherfoo(); // How can I add this and othervar to the Example namespace?
namespace Example {
   int vartest;
   void foo();
}
namespace Example {
    int othervar;
    void otherfoo();
}
file2.cpp

namespace Example {
   int vartest;
   void foo();
}
int othervar;
void otherfoo(); // How can I add this and othervar to the Example namespace?
namespace Example {
   int vartest;
   void foo();
}
namespace Example {
    int othervar;
    void otherfoo();
}

谢谢

只需声明它是相同“名称”的等效名称1
名称空间

file1.cpp

namespace Example {
   int vartest;
   void foo();
}
int othervar;
void otherfoo(); // How can I add this and othervar to the Example namespace?
namespace Example {
   int vartest;
   void foo();
}
namespace Example {
    int othervar;
    void otherfoo();
}
file2.cpp

namespace Example {
   int vartest;
   void foo();
}
int othervar;
void otherfoo(); // How can I add this and othervar to the Example namespace?
namespace Example {
   int vartest;
   void foo();
}
namespace Example {
    int othervar;
    void otherfoo();
}
名称空间被合并

它们是否必须在头文件中声明

不可以。您可以在
命名空间
中声明任何
命名空间
。(注意,“全局范围”也是一个
名称空间

如何在命名空间中声明函数

只需在
命名空间中声明它即可。正如你所做的那样

假设我正在处理一个包含不同文件的大型项目。 我在文件中定义了一个名称空间,但是我想添加更多 函数,但这些函数是在中定义的 另一个文件。那能做到吗

合并同一名称空间中相同名称的名称空间

namespace X { void foo(){} }
namespace X { void foo(){} }  //Error, redefinition of `foo` because the namespace ::X is merged




我记得所谓的“全局作用域”实际上是一个称为
全局名称空间

的名称空间,加上1作为全局名称空间的最后一个注释。由于您来自C,因此您可能会发现匿名名称空间是
静态
的有用替代品<代码>名称空间{bool Ireturntrue(){return true;}}
现在被很好地隔离开来,在链接时不会增加名称污染。