У меня вопрос о переменной extern в пространстве имен C++. Вот .h файл класса CBVRВнешняя переменная в пространстве имен 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;
}
Файл .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;
}
}
так какая разница?
@Edited вопрос. – Maystro
@Maystro: Вы прокомментировали определение 'cvbr', поэтому компоновщик жаловался, что он не определен. Почему ты бы так поступил? –
Я просто хочу понять разницу и то, что она делает именно «параметры :: CBVR parameters :: cbvr»? вы сказали определение? он уже был определен в пространстве имен, не был? – Maystro