我對命名空間C++中的extern變量有疑問。這裏是CBVR類命名空間中的extern變量C++
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;
}
的.h文件.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;
}
}
有啥區別?
@編輯的問題。 – Maystro 2015-02-09 16:14:11
@Maystro:您評論了'cvbr'的定義,因此鏈接器抱怨說它沒有被定義。爲什麼要這麼做? – 2015-02-09 16:15:36
我只是想了解它的差別和它究竟做了什麼「parameters :: CBVR parameters :: cbvr」?你說的定義?它已經在命名空間中定義了,不是嗎? – Maystro 2015-02-09 16:25:56