首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:从MSVC切换到G++:全局变量

问C++:从MSVC切换到G++:全局变量
EN

Stack Overflow用户
提问于 2010-04-28 19:55:21
回答 2查看 1.1K关注 0票数 1

我最近转向Linux,并希望在G++上编译我的VisualStudio2010 G++源代码,它只使用STL。

我的Linux机器目前不可用,但我可以尝试告诉您发生了什么,首先:

  • 在我试图编译我的项目时,我在main中使用的所有全局变量以及在MSVC上完美地工作的所有变量都会导致myGlobalVar is not defined in this scope错误.

我的项目构建与下面的示例几乎相同:

代码语言:javascript
复制
// 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
}

  • ,我做错了什么?
  • ,G++和MSVC在全局变量方面的区别在哪里?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-28 20:14:32

您需要按以下方式编译:

g++ main.cpp myclass.cpp -o myapp

如下所示: g++ main.cpp -o myapp,它将错过myclass.cpp文件中的全局变量声明。

票数 2
EN

Stack Overflow用户

发布于 2010-04-28 20:12:10

您的示例代码在Linux和Windows上都应该工作得很好。GCC和MSVC在全局变量的可见性方面不应该有任何差异。我认为你所看到的更有可能是另一个问题的症状。

我能从头上想出的唯一一件事,可能会导致这样的问题,就是“搞砸”头文件,用技术术语来形容它。将代码从Windows移植到Linux中的一个常见问题是头文件区分大小写。尽管MSVC不在乎您是否将MyHeader.h作为#include <myheader.h>导入,但它在Linux上肯定会失败。如果没有包含标头,编译器将错过extern声明,并可能导致所看到的错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2732700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档