地图段错误 [英] Map Seg Fault
问题描述
我之前发布了这个问题并进行了一些更改。由于主题
下车主题我决定发布另一个。
这是代码。
#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屋!