在C ++中使用extern
和const
还有其他问题。我还阅读了有关内部和外部链接的信息(自从我使用C ++已经有一段时间了),但是如果有人提醒我有关以下特定情况的用法,我将不胜感激。
我有两个cpp
文件:Description.cpp和Register.cpp,还有一个hpp
文件:Description。 h。它们是这样的
//Description.cpp
#include "Description.hpp"
extern const FD models[];
//some other code
。
//Register.cpp
#include "Description.hpp"
extern const FD models[2]={
{"elementA",{1,2}},
{"elementB",{3,4}}
};
。
//Description.hpp
struct FD{
string name;
double v[2];
};
我想知道为什么Register.cpp中需要extern关键字
答案 0 :(得分:2)
如注释中所讨论,默认情况下,const
对象具有internal linkage,这意味着您只能从定义它的文件中看到它。要更改它,请使用关键字{{ 1}},表示“可以从其他文件中看到此变量”。因此,在extern
中,您需要Register.cpp
来告诉链接器使其在其他位置可见,在extern
中,您需要Description.cpp
来告诉编译器它可能在其他位置定义。
更好的解决方案是将声明extern
移到extern const FD models[];
文件(.hpp
或新的Description.hpp
中,具体取决于项目的详细信息)。然后在Register.hpp
和使用Description.cpp
的任何其他代码中,您包括该文件,根本不需要声明。在models
中,您还包含此标头。然后,编译器知道Register.cpp
具有外部链接,您无需再说models
。