[英]extern variable in namespace c++
我對命名空間c ++中的extern變量有疑問。 這是CBVR類的.h文件
namespace parameters
{
class CBVR
{
private:
std::string database;
public:
CBVR(void);
void initialize(const std::string &fileName);
static void printParameter(const std::string &name,
const std::string &value);
};
extern CBVR cbvr;
}
.cpp文件如下所示:
parameters::CBVR parameters::cbvr;
using namespace xercesc;
parameters::CBVR::CBVR(void)
{
}
void parameters::CBVR::initialize(const std::string &_fileName)
{
}
void parameters::CBVR::printParameter(const std::string &_name, const std::string &_value)
{
if (_value.empty())
{
cbvr << " -> " << _name << " = < EMPTY!!! >" << std::endl;
}
else
{
cbvr << " -> " << _name << " = \"" << _value << "\"" << std::endl;
}
}
在方法printParameter
,我們使用的cbvr
沒有任何對名稱空間的引用。 parameters::CBVR parameters::cbvr;
處理它,但我不明白它的含義,以及為什么它允許在類中像這樣使用cbvr
變量?
編輯:
我做到了,但它說: error: undefined reference to parameters::cbvr
//parameters::CBVR parameters::cbvr;
using namespace parameters;
using namespace xercesc;
CBVR::CBVR(void)
{
}
void CBVR::initialize(const std::string &_fileName)
{
}
void CBVR::printParameter(const std::string &_name, const std::string &_value)
{
if (_value.empty())
{
cbvr << " -> " << _name << " = < EMPTY!!! >" << std::endl;
}
else
{
cbvr << " -> " << _name << " = \"" << _value << "\"" << std::endl;
}
}
那有什么區別呢?
在成員函數的定義中,您位於類的范圍內,而該類又位於其周圍的名稱空間的范圍內。 因此,在類或名稱空間中聲明的任何內容都可以在那里訪問而無需限定。
在命名空間之外,沒有非限定名稱,這就是為什么您需要在變量和函數定義中使用parameters::
限定條件的原因。
有
void parameters::CBVR::printParameter(const std::string &_name, const std::string &_value)
{
... }
與...相同
namespace parameters
{// notice, the signature of the method has no "parameters" before CBVR
void CBVR::printParameter(const std::string &_name, const std::string &_value)
{
... }
}
該類在名稱空間的范圍內,因此您要實現的類的主體也在該范圍內。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.