地图段错误 [英] Map Seg Fault

查看:82
本文介绍了地图段错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我之前发布了这个问题并进行了一些更改。由于主题

下车主题我决定发布另一个。


这是代码。

#include< ; map>

#include< string>

#include< iostream>

使用命名空间std;


class CCSI_EnviromentClass

{

private:


//构造函数

CCSI_EnviromentClass ();

struct StateType

{

int m_integer;

string m_string;

float m_float;


StateType():m_integer(-1),m_float(1.0){}

};

typedef std :: map< std :: string,StateType> ItemStateMap;


ItemStateMap m_itemMap;


static CCSI_EnviromentClass * ms_instance;


public:


//析构函数

~CCSI_EnviromentClass();


//方法


static CCSI_EnviromentClass * instance();

int getItemStateInt(std :: string item);

float getItemStateFloat(std :: string item);

std :: string getItemStateString(std :: string item);


int setItemState(std :: string item,std :: string state);

int setItemState(std :: string item,float state);

int setItemState(std :: string item,int state);


void print();

};


//初始化

CCSI_EnviromentClass * CCSI_EnviromentClass :: ms_instance = NULL;


CCSI_EnviromentClass :: CCSI_EnviromentClass()

{

// cout<< EnviromentClass Instated of EnviromentClass <<结束;

}

CCSI_EnviromentClass ::〜CCSI_EnviromentClass()

{

ms_instance = NULL;

// cout<< EnviromentClass Destroyed的实例<<结束;

}


CCSI_EnviromentClass * CCSI_EnviromentClass :: instance()

{

if( ms_instance == NULL)

{

ms_instance = new CCSI_EnviromentClass();

}

返回ms_instance; < br $>
}


std :: string CCSI_EnviromentClass :: getItemStateString(std :: stri ng item)

{

StateType状态;


ItemStateMap :: iterator map_iterator;


//在列表中查找项目名称

map_iterator = m_itemMap.find(item);


//如果找到该项,则返回状态,否则返回NULL

if(map_iterator != m_itemMap.end())

{

state = m_itemMap [item];

return state.m_string; //返回字符串部分的联合

}

else

{

返回NULL;

}


}


float CCSI_EnviromentClass :: getItemStateFloat(std :: strin g item)

{

StateType州;


ItemStateMap :: iterator map_iterator;


//查找项目名称list

map_iterator = m_itemMap.find(item);


//如果找到该项,则返回状态,否则返回NULL

if(map_iterator!= m_itemMap.end())

{

state = m_itemMap [item];

返回state.m_float ; //返回浮动部分的工会

}

其他

{

返回-1;

}

}


int CCSI_EnviromentClass :: getItemStateInt(std :: string item)

{

StateType状态;


ItemStateMap :: iterator map_iterator;


//在列表中查找项目名称

map_iterator = m_itemMap.find(item);


//如果找到该项,则返回状态,否则返回NULL

if (map_iterator!= m_itemMap.end())

{

state = m_itemMap [item];

return state.m_integer; //返回浮动部分的工会

}

其他

{

返回-1;

}

}


int CCSI_EnviromentClass :: setItemState(std :: string p_item,std :: string

p_state)

{


StateType状态;

state.m_string = p_state;


m_itemMap.insert(make_pair(p_item,state)); //这就是SEG

故障

// m_itemMap [p_item] = state; //这就是赛格失败的原因

返回0;

}


int CCSI_EnviromentClass :: setItemState(std :: string p_item,float

p_state)

{

StateType状态;

state.m_float = p_state;

m_itemMap.insert(make_pair(p_item,state));

// m_itemMap [p_item] =州;

返回0;

}


int CCSI_EnviromentClass :: setItemState(std :: string p_item,int p_state)

{

StateType州;

state.m_integer = p_state;

m_itemMap.insert(make_pair(p_item,state));

// m_itemMap [p_item] =状态;

返回0;

}

void CCSI_EnviromentClass :: print()

{

ItemStateMap :: iterator mapIterator;


for(mapIterator = m_itemMap.begin(); mapIterator!= m_itemMap.end();

mapIterator ++)

{

cout<< mapIterator-> first<< " =" ;;

mapIterator-> second.print();

cout<<结束;

}

}


谁能告诉我为什么这是段错误?这将非常值得赞赏。


谢谢subaru88011

I posted this question earlier and made some changes. Due to the topic
getting off topic I decided to post another one.

Here is the code.
#include <map>
#include <string>
#include <iostream>
using namespace std;

class CCSI_EnviromentClass
{
private:

//Constructor
CCSI_EnviromentClass();
struct StateType
{
int m_integer;
string m_string;
float m_float;

StateType() : m_integer(-1), m_float(1.0) {}
};

typedef std::map<std::string, StateType> ItemStateMap;

ItemStateMap m_itemMap;

static CCSI_EnviromentClass *ms_instance;

public:

//Destructor
~CCSI_EnviromentClass();

//Methods

static CCSI_EnviromentClass *instance();

int getItemStateInt(std::string item);
float getItemStateFloat(std::string item);
std::string getItemStateString(std::string item);

int setItemState(std::string item, std::string state);
int setItemState(std::string item, float state);
int setItemState(std::string item, int state);

void print();
};

//Initialize
CCSI_EnviromentClass *CCSI_EnviromentClass::ms_instance = NULL;

CCSI_EnviromentClass::CCSI_EnviromentClass()
{
//cout << "Instance of EnviromentClass Created" << endl;
}
CCSI_EnviromentClass::~CCSI_EnviromentClass()
{
ms_instance = NULL;
//cout << "Instance of EnviromentClass Destroyed" << endl;
}

CCSI_EnviromentClass *CCSI_EnviromentClass::instance()
{
if( ms_instance == NULL)
{
ms_instance = new CCSI_EnviromentClass();
}
return ms_instance;
}

std::string CCSI_EnviromentClass::getItemStateString(std::stri ng item)
{
StateType state;

ItemStateMap::iterator map_iterator;

//Find the item name in the list
map_iterator = m_itemMap.find(item);

//If the item was found then return the state, otherwise return NULL
if(map_iterator != m_itemMap.end())
{
state = m_itemMap[item];
return state.m_string; //return string part of union
}
else
{
return NULL;
}

}

float CCSI_EnviromentClass::getItemStateFloat(std::strin g item)
{
StateType state;

ItemStateMap::iterator map_iterator;

//Find the item name in the list
map_iterator = m_itemMap.find(item);

//If the item was found then return the state, otherwise return NULL
if(map_iterator != m_itemMap.end())
{
state = m_itemMap[item];
return state.m_float; //return float part of union
}
else
{
return -1;
}
}

int CCSI_EnviromentClass::getItemStateInt(std::string item)
{
StateType state;

ItemStateMap::iterator map_iterator;

//Find the item name in the list
map_iterator = m_itemMap.find(item);

//If the item was found then return the state, otherwise return NULL
if(map_iterator != m_itemMap.end())
{
state = m_itemMap[item];
return state.m_integer; //return float part of union
}
else
{
return -1;
}
}

int CCSI_EnviromentClass::setItemState(std::string p_item, std::string
p_state)
{

StateType state;
state.m_string = p_state;

m_itemMap.insert(make_pair(p_item,state)); //THIS IS WHERE IT IS SEG
FAULTING
//m_itemMap[p_item] = state; //THIS IS WHERE IT IS SEG FAULTING
return 0;
}

int CCSI_EnviromentClass::setItemState(std::string p_item, float
p_state)
{
StateType state;
state.m_float = p_state;
m_itemMap.insert(make_pair(p_item,state));
//m_itemMap[p_item] = state;
return 0;
}

int CCSI_EnviromentClass::setItemState(std::string p_item, int p_state)
{
StateType state;
state.m_integer = p_state;
m_itemMap.insert(make_pair(p_item,state));
//m_itemMap[p_item] = state;
return 0;
}
void CCSI_EnviromentClass::print()
{
ItemStateMap::iterator mapIterator;

for(mapIterator = m_itemMap.begin(); mapIterator != m_itemMap.end();
mapIterator++)
{
cout << mapIterator->first << " = ";
mapIterator->second.print();
cout << endl;
}
}

Can anyone tell me why this is seg faulting? That will greatly be
appreciated.

Thanks subaru88011

推荐答案

subaruwrx88011写道:
subaruwrx88011 wrote:
我之前发布了这个问题并进行了一些更改。由于主题下滑主题我决定发布另一个。


....你又错过了!您的代码无法编译!

以下是代码。
#include< map>
#include< string>
#include< iostream>
using namespace std;

class CCSI_EnviromentClass
{
private:

//构造函数
CCSI_EnviromentClass();

struct StateType
{
int m_integer;
string m_string;
float m_float;

StateType():m_integer(-1) ,m_float(1.0){}
};

typedef std :: map< std :: string,StateType> ItemStateMap;

ItemStateMap m_itemMap;

静态CCSI_EnviromentClass * ms_instance;

公开:

//析构函数 ~CCSI_EnviromentClass();

//方法

静态CCSI_EnviromentClass * instance();

int getItemStateInt(std :: string item);
float getItemStateFloat(std :: string item);
std :: string getItemStateString(std :: string item);

int setItemState(std :: string item,std: :string state);
int setItemState(std :: string item,float state);
int setItemState(std :: string item,int state);

void print( );
};
[...]

void CCSI_EnviromentClass :: print()
{ItemDataMap :: iterator mapIterator;

for(mapIterator = m_itemMap.begin(); mapIterator!= m_itemMap.end();
mapIterator ++)
{
cout<< mapIterator-> first<< " =" ;;
mapIterator-> second.print();


这不编译。 ''StateType''中没有成员''print''。

cout<< endl;
}


有谁能告诉我为什么这是段错误?这将非常值得赞赏。
I posted this question earlier and made some changes. Due to the topic
getting off topic I decided to post another one.
.... And you miss again! Your code does not compile!

Here is the code.
#include <map>
#include <string>
#include <iostream>
using namespace std;

class CCSI_EnviromentClass
{
private:

//Constructor
CCSI_EnviromentClass();
struct StateType
{
int m_integer;
string m_string;
float m_float;

StateType() : m_integer(-1), m_float(1.0) {}
};

typedef std::map<std::string, StateType> ItemStateMap;

ItemStateMap m_itemMap;

static CCSI_EnviromentClass *ms_instance;

public:

//Destructor
~CCSI_EnviromentClass();

//Methods

static CCSI_EnviromentClass *instance();

int getItemStateInt(std::string item);
float getItemStateFloat(std::string item);
std::string getItemStateString(std::string item);

int setItemState(std::string item, std::string state);
int setItemState(std::string item, float state);
int setItemState(std::string item, int state);

void print();
};
[...]

void CCSI_EnviromentClass::print()
{
ItemStateMap::iterator mapIterator;

for(mapIterator = m_itemMap.begin(); mapIterator != m_itemMap.end();
mapIterator++)
{
cout << mapIterator->first << " = ";
mapIterator->second.print();
This does not compile. There is no member ''print'' in ''StateType''.
cout << endl;
}
}

Can anyone tell me why this is seg faulting? That will greatly be
appreciated.




你能发布_real_代码吗?


V

-

请在邮寄回复时从我的地址中删除资金



Can you post _real_ code?

V
--
Please remove capital As from my address when replying by mail


您是否正在尝试编译此内容?

我在StateType中有一个print方法。但是,我要求的是b
。问题是setItemState方法中的seg faulting。

我的代码编译,我保证。


因为你坚持

这里是StateType打印方法

将它放在struct StateType中


void print()

{

if(m_integer!= -1)

{

cout<< m_integer<< " " ;;

}

else if(m_string.empty())

{

cout<< ; m_string<< " " ;;

}

else if(m_float!= -1.0)

{

cout<< ; m_float<< " " ;;

}

}


和m_float初始化为-1.0而不是1.0。这是我的

部分的错过类型。

Are you trying to compile this?
I do have a print method in StateType. But it is irrevelant to what I
am asking. The problem is seg faulting in the setItemState methods.
My code compiles, I guarentee that.

Since you insist
Here is the StateType print method
Place it inside the struct StateType

void print()
{
if (m_integer != -1)
{
cout<< m_integer << " ";
}
else if(m_string.empty())
{
cout << m_string << " ";
}
else if(m_float != -1.0)
{
cout << m_float << " ";
}
}

and m_float is initialized to -1.0 not 1.0. That was a miss type on my
part.




subaruwrx88011写道:

subaruwrx88011 wrote:
您是否正在尝试编译它?
我在StateType中有一个打印方法。但它对我所要求的东西是无关紧要的。问题是setItemState方法中的seg faulting。
我的代码编译,我保证。
Are you trying to compile this?
I do have a print method in StateType. But it is irrevelant to what I
am asking. The problem is seg faulting in the setItemState methods.
My code compiles, I guarentee that.



现在该类编译了我们用它做什么?如果我们没有一组导致失败的语句,怎么能在调试器中运行




我很快就感到无聊所以如果你想要一个你需要的答案

帮助我们帮助你。


Now that the class compiles what do we do with it? How can it be run
in a debugger if we don''t have a set of statements that causes failure?

I get bored rather quickly so if you want an answer you kind of have to
help us help you.


这篇关于地图段错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆