![](/img/trans.png)
[英]C++: undefined reference to const pointer when declaring as extern
[英]Undefined reference when using extern on a c++ object, but not integral type
嘗試在c ++對象上使用extern時,我得到了未定義的引用錯誤。 整體類型似乎不會發生這種情況。 我錯過了什么?! 下面的代碼復制了這個問題:
file1.cpp:
#include <string>
const std::string s("test");
int i = 99;
int main()
{
extern void Test();
Test();
}
file2.cpp:
#include <iostream>
#include <string>
extern const std::string s;
extern int i;
void Test()
{
std::cout << s << std::endl;
std::cout << i << std::endl;
}
如果我注釋掉's'std :: string變量的用法,那么鏈接錯誤就會消失。
關於SO的其他問題與此類似,但它們似乎都與未定義變量的人有關,我就是這樣!
這是const
上std::string
,它給s
內部鏈接。 引自[3.5程序和鏈接]:3:
具有命名空間作用域(3.3.6)的名稱具有內部鏈接(如果它的名稱)
- 一個顯式聲明為const或constexpr的變量,既未顯式聲明為extern,也未聲明為具有外部鏈接; 要么
如果你刪除const,它在vc ++中工作,如果你定義它們extern const,它也可以工作。
// file1.cpp
extern const std::string s("test");
extern const int i = 99;
// file2.cpp
extern const std::string s;
extern const int i;
如果從file1.cpp中刪除任何“extern”,則無法編譯。 如果變量定義為const,則可以從file1.cpp中刪除“extern”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.