作者:KTone | 来源:互联网 | 2022-12-08 12:07
我只是测试外部如何工作(使用MSVC),无论我做什么,我都无法工作:
// Test.h
int externalint = 10
// Main.cpp
void main()
{
extern int externalint;
std::cout <
这会导致链接错误,即使我在标头中定义了它.我不希望包含标题,因为我读它的方式说它可以在另一个翻译单元中,不需要包括在内.我读错的方式是错了还是我写错了?如果我包含标题,即使没有extern声明,它也可以正常工作.
1> Stephan Lech..:
头文件通常不是翻译单元,但意味着它们包含在内.这就是为什么头文件通常不"定义"变量的原因,因为当头文件被不同的翻译单元包含时会导致多个定义错误(从而一次又一次地重新定义变量).
这就是"extern"到位的地方,因为这只是为了"声明"变量而不"定义"它."extern"表示"将在其他一些翻译单元中定义".
通常的方法是:
// Test.h
extern int externalint; // just declares externalint
// Test.cpp
int externalint = 10; // defines externalint
// main.cpp
#include "Test.h" // importing the declaration of "externalint" defined elsewhere
int main() {
std::cout <