簡體   English   中英

在c ++對象上使用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的其他問題與此類似,但它們似乎都與未定義變量的人有關,我就是這樣!

這是conststd::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.

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