簡體   English   中英

C ++命名空間中的extern變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM