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