我最近转向Linux,并希望在G++上编译我的VisualStudio2010 G++源代码,它只使用STL。
我的Linux机器目前不可用,但我可以尝试告诉您发生了什么,首先:
main中使用的所有全局变量以及在MSVC上完美地工作的所有变量都会导致myGlobalVar is not defined in this scope错误.我的项目构建与下面的示例几乎相同:
// myclass.h
class myClass
{
// ....
};
extern myClass globalInstance;
// myclass.cpp
#include "myclass.h"
// myClass functions located here
myClass globalInstance;
// main.cpp
#include "myclass.h"
int main( )
{
// Accessing globalInstance results in an error: Not defined in this scope
}发布于 2010-04-28 20:14:32
您需要按以下方式编译:
g++ main.cpp myclass.cpp -o myapp
如下所示: g++ main.cpp -o myapp,它将错过myclass.cpp文件中的全局变量声明。
发布于 2010-04-28 20:12:10
您的示例代码在Linux和Windows上都应该工作得很好。GCC和MSVC在全局变量的可见性方面不应该有任何差异。我认为你所看到的更有可能是另一个问题的症状。
我能从头上想出的唯一一件事,可能会导致这样的问题,就是“搞砸”头文件,用技术术语来形容它。将代码从Windows移植到Linux中的一个常见问题是头文件区分大小写。尽管MSVC不在乎您是否将MyHeader.h作为#include <myheader.h>导入,但它在Linux上肯定会失败。如果没有包含标头,编译器将错过extern声明,并可能导致所看到的错误。
https://stackoverflow.com/questions/2732700
复制相似问题