簡體   English   中英

命名空間內 C++ 中的變量聲明

[英]Variable declaration in C++ within namespaces

在我正在使用的庫中,一些變量的聲明如下:

char &ns::x = y;

但是,如果我這樣做,我會收到以下錯誤: error: no member named 'x' in namespace 'ns'

如果我重寫它,它會起作用:

namespace ns {
    char &x = y;
}

究竟有什么區別? 為什么它在圖書館內工作?

如果您是對的並且庫中的代碼與編寫的完全相同,那么這意味着在該庫的其他地方,您將找到以下聲明:

namespace ns {
    extern char& x;
}

換句話說, x必須已經在ns聲明(並且未定義!)。

第一次聲明

char &ns::x = y;

假定名稱x已在命名空間ns中聲明。 然而這個假設是錯誤的(在提供的代碼片段中沒有先前的變量聲明。可能代碼片段不完整。)。

如果變量 x 已經在命名空間 ns 中聲明(沒有定義),則代碼片段可以工作。

例如

#include <iostream>

namespace ns
{
    extern char &x;
}

char y;
char & ns::x = y;

int main() {
    return 0;
}

在此代碼段中

namespace ns {
    char &x = y;
}

定義了一個由 object y初始化的引用。

使用命名空間的變量聲明:

#include <iostream> 
using namespace std; 

// Variable created inside namespace 
namespace first 
{ 
  int val = 500; 
} 
// Global variable 
int val = 100; 
int main() 
{ 
// Local variable 
   int val = 200; 
// These variables can be accessed from 
// outside the namespace using the scope 
// operator :: 
   cout << first::val << '\n';  
   return 0; 
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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