VS2010与extern关键字
VS2010 with extern keyword
我有以下两个文件:
- foo。
- bar.cpp
在foo.h
中我声明了一个变量extern
。
现在,我想在bar.cpp
中使用相同的变量(包括foo.h
之后)。
在VS2008和VS2010下,我得到unresolved external symbol
错误,而在Ubuntu与gcc编译是成功的。
(即,我试图编译以下源代码:http://www.fromdual.com/using-mysql-user-defined-functions-udf;Foo.h是指srv0srv.h, bar.cpp是指源代码。所有包含都已到位,编译成功,链接失败)
可能是什么问题?
extern关键字向编译器表明它后面的变量已经在其他地方声明过了。它实际上并不为变量分配空间。如果你想创建一个全局变量,你可以通过包含一个头文件来使用它(顺便说一下,这通常是一个坏主意),你可以用下面的方式来做。
在foo:extern int myVar;
在foo.cpp: int myVar;
myVar现在位于foo.cpp中,但是foo.h中的extern语句允许其他文件(如bar.cpp)中的代码通过包含foo.h来访问它。
当您使用extern
声明变量(其他源对象或文件中的全局变量)时,您实际上告诉编译器在其他地方查找该变量的定义。在本例中,需要提供另一个定义int myVar
的源文件。
您的变量必须在某个源文件中有一个引用。通过extern
关键字,你只告诉"有一个变量",但链接器必须知道它的位置。在编译源代码时,它会为变量等创建引用。链接器将根据这些引用链接。如果没有实际创建一个变量的引用,链接器将无法找到该引用,因此会给出错误。如果你使用extern
,你说不要在这里创建对这个变量或任何其他东西的引用。但必须在其他地方有一个参考。
问题是,上述符号必须从dll中导出(通过dllspec),才能从外部可见。只有extern关键字不允许从外部看到。
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- C++17 'inline variable' vs 'extern' 关键字继承自 C 的新功能
- 对 C++ 中的特定标头使用 extern C 关键字是否允许从 void* 转换为 char*?
- extern 关键字在包含文件头文件C++
- 我应该在源文件之间共享的常量的定义中添加关键字"extern"吗
- 为什么我应该使用extern关键字来声明命名空间范围中的变量
- "extern"关键字用法
- 具有多个文件的extern关键字
- 正确使用"extern"关键字
- CppUTest中extern关键字的替代方案是什么
- 为什么C++编译器允许 extern 关键字与定义相结合
- C++ extern 关键字和全局变量
- 如何使用模板 extern 关键字分隔测试类型
- extern关键字在C++中的用法
- c++ -对extern关键字感到困惑
- 这里需要extern关键字,cpp文件中的const
- extern关键字和多个翻译单元的用法
- 在定义和声明中都指定extern关键字可以吗?
- C++:我无法理解"extern"关键字在我的程序中是如何工作的