在Linux上直接为std :: map赋值

时间:2015-12-11 05:51:22

标签: c++ linux global-variables stdstring stdmap

我有std :: map,里面包含一个std :: string和结构作为元素。

我的头文件看起来像;

struct stFBInterfaceSpec {
    char   numOfEventInputs;
    char** EventInputsName;
    char   numOfEventOutputs;`
    char** EventOutputsName;
    char   numOfDataInputs;
    char** DataInputsName;
    char** DataInputTypeName;
    char   numOfDataOutputs;
    char** DataOutputsName;
    char** DataOutputTypeName;
};

template<typename T>
struct stStd_Fbt_Element {
    stFBInterfaceSpec Fbt_Spec;
    T(*funcPtr)(T, T);
};

typedef std::map<std::string, stStd_Fbt_Element<int>> StdFbts_List;

template<typename T> T ADD(const T pa_roIN1, const T pa_roIN2) {
    return pa_roIN1 + pa_roIN2;
}

template<typename T> T MUL(const T pa_roIN1, const T pa_roIN2) {
    return pa_roIN1 * pa_roIN2;
}

template<typename T> T SUB(const T pa_roIN1, const T pa_roIN2) {
    return pa_roIN1 - pa_roIN2;
}

template<typename T> T DIV(const T pa_roIN1, const T pa_roIN2) {
    return (pa_roIN1 / pa_roIN2);
}

extern StdFbts_List Std_Fbts_List; // to use it on other files

class stdFbts
{
public:
    stdFbts();
    ~stdFbts(){};
};

在main.cpp中:(在int main()之上)

StdFbts_List Std_Fbts_List; // global declaration

char * arithEiNames[] = { (char *)"REQ"};
char * arithEoNames[] = { (char *)"CNF"};
char * arithDiNames[] = { (char *)"IN1", (char *)"IN2" };
char * arithDiDataType[] = { (char *)"ANY_MAGNITUDE", (char *)"ANY_MAGNITUDE" };
char * arithDoNames[] = { (char *)"OUT" };
char * arithDoDataType[] = { (char *)"ANY_MAGNITUDE"};

stFBInterfaceSpec Arithmetic = { 
    1, arithEiNames, 
    1, arithEoNames, 
    2, arithDiNames, arithDiDataType,
    1, arithDoNames, arithDiDataType
};

我的班级看起来像:

stdFbts::stdFbts()
{
    Std_Fbts_List["F_ADD"] = { Arithmetic, ADD };
    Std_Fbts_List["F_DIV"] = { Arithmetic, DIV };
    Std_Fbts_List["F_MUL"] = { Arithmetic, MUL };
    Std_Fbts_List["F_SUB"] = { Arithmetic, SUB };
}

int main(void)
{
    new stdFbts();
    while(1);
}

上面的代码在VS2013上编译并正常工作,但是当我在linux上尝试相同的代码时,它会引发分段错误。

注意:为了避免警告,我在上述程序中进行了类型string to char *。 ADD,SUB,DIV,MUL功能也位于我实际项目的不同头文件中。

是否有任何解决方案可以将字符串值分配给全局变量。 我将CMAKE_CXX_FLAGS定义为"-std=c++11 -Wpointer-arith -W -Wall -Wextra -Woverloaded-virtual -Wconversion -Wfloat-conversion -Wpointer-arith -Wno-write-strings -ggdb",我的gcc版本为4.9.3。

0 个答案:

没有答案