C ++ - 使用全局范围初始化静态变量

时间:2017-05-04 07:49:35

标签: c++

我在头文件中包含了一个静态c ++字符串数组。我得到了一个段错误 当我尝试在源文件中访问它时。

以下是详细信息。 操作系统:Linux 编译器:g ++

job.hpp

static string values[2] = {"hello","welcome"};

class Job
{
public:
    void getValues();
};

job.cpp

#include "job.hpp"

void Job::getValues()
{
    // Seg Fault Here
    // i value is either 0 or 1 and is based on some external flag
    cout << values[i] << endl;
}

我相信values数组没有初始化。此代码适用于AIX上的xlc ++编译器。是否有任何g ++编译器标志来初始化静态变量。

1 个答案:

答案 0 :(得分:1)

为什么不将'value'数组变成类的静态属性?以下内容可能会有效。

<强> job.h

#ifndef JOB_H
#define JOB_H
#include <string>
#include <iostream>
using namespace std;

class Job
{
    public:
        Job();
        void getValues() const;

        //declare static variable in .hpp file
        static string values[2];
    private:
};
#endif

<强> job.cpp

#include "job.h"

//initialize variable in .cpp file
string Job::values[2]={"hello", "welcome"};

Job::Job(){}

void Job::getValues() const
{
    cout << values[i] << endl;
}