我有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。