更改本地班级名称

时间:2018-05-28 00:32:31

标签: c++ class

当我改变班级名称时,段错误消失了,我不明白。我已经构建了一个名为Environ的类,我创建它并在main中调用它。我发现当我将main中的局部变量名从this_environ更改为environ时,我得到一个段错误,其中没有任何Environ变量已初始化。有没有人进入这个或理解为什么这将是一个问题?有趣的是,当我在我的Ubuntu机器上编译时,这不是一个问题...

#include <vector>
#include <map>
#include <iostream>
//#include "Environ.hpp"

// Namespaces
using namespace std;

class Environ {
    public:
    // Public objects.
    vector<unsigned> years_;

    void initialise() {
          cerr << "entering initialsie" << endl;
          years_ = {12,32,23};
    }
};

int main() {
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
    Environ this_environ;
    this_environ.initialise();
    cout << "Finished initialisation" << endl;
    system("PAUSE");
    return 0;
}

为了重现性,我正在使用gcc版本5.1.0构建Windows 10,并进行以下构建调用

g++ -std=c++0x -O2 -g3 -Wall -c -fmessage-length=0

1 个答案:

答案 0 :(得分:2)

我刚刚发现environ是stdlib中的一个宏,所以调用变量很可能不是一个好主意。在stdlib.h的第633行定义的宏,或许我应该提到我的GCC来自here

#define sys_errlist _sys_errlist
#define sys_nerr _sys_nerr
#define environ _environ
  char *__cdecl ecvt(double _Val,int _NumOfDigits,int *_PtDec,int *_PtSign) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
  char *__cdecl fcvt(double _Val,int _NumOfDec,int *_PtDec,int *_PtSign) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
  char *__cdecl gcvt(double _Val,int _NumOfDigits,char *_DstBuf) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
  char *__cdecl itoa(int _Val,char *_DstBuf,int _Radix) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
  char *__cdecl ltoa(long _Val,char *_DstBuf,int _Radix) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
  int __cdecl putenv(const char *_EnvString) __MINGW_ATTRIB_DEPRECATED_MSVC2005;