包含具有 CString 成员变量的类的集合仅存储首字母
Posted
技术标签:
【中文标题】包含具有 CString 成员变量的类的集合仅存储首字母【英文标题】:set containing a class with CString member variables stores only first letters 【发布时间】:2012-05-16 07:53:15 【问题描述】:我正在使用 MFC,并且我有这个课程:
class CUnit
private:
CString name;
CString init;
CString chp;
CString rhp;
CString condition;
public:
CUnit(void);
~CUnit(void);
void setName( CString str );
void setInit( CString str );
void setCHP( CString str );
void setRHP( CString str );
void setCond( CString str );
CString getName() const;
CString getInit() const;
CString getCHP() const;
CString getRHP() const;
CString getCond() const;
bool operator< ( CUnit ) const;
;
CUnit::CUnit(void)
CUnit::~CUnit(void)
bool CUnit::operator< ( CUnit unit ) const
return !( this->init < unit.init );
void CUnit::setName( CString str )
name = str;
void CUnit::setInit( CString str )
init = str;
void CUnit::setCHP( CString str )
chp = str;
void CUnit::setRHP( CString str )
rhp = str;
void CUnit::setCond( CString str )
condition = str;
CString CUnit::getName() const
return name;
CString CUnit::getInit() const
return init;
CString CUnit::getCHP() const
return chp;
CString CUnit::getRHP() const
return rhp;
CString CUnit::getCond() const
return condition;
我成功地从 Editboxes 中获取了值,但是当我将它们插入 set<CUnit>
时,当我返回 CString
值时,我只得到第一个字母。我尝试了一个矢量,但它都是一样的。
我像这样填充集合:
vector<CUnit> units;
CUnit unit;
CEdit *edit;
CString str;
edit = reinterpret_cast<CEdit *>(GetDlgItem(IDC_NAME1));
edit->GetWindowText(str);
unit.setName(str);
edit = reinterpret_cast<CEdit *>(GetDlgItem(IDC_INIT1));
edit->GetWindowText(str);
unit.setInit(str);
edit = reinterpret_cast<CEdit *>(GetDlgItem(IDC_CHP1);
edit->GetWindowText(str);
unit.setCHP(str);
edit = reinterpret_cast<CEdit *>(GetDlgItem(IDC_RHP1));
edit->GetWindowText(str);
unit.setRHP(str);
edit = reinterpret_cast<CEdit *>(GetDlgItem(IDC_COND1+i));
edit->GetWindowText(str);
unit.setCond(str);
units.push_back(unit);
我用它来检查一切是否正常:
vector<CUnit>::iterator pos = units.begin();
str = *pos->getName();
SetDlgItemText(IDC_NAME2, str );
【问题讨论】:
为什么不把你插入set
的代码贴出来?
嗯,set<CUint>
的东西在哪里?
与实际问题无关,但在所有 set 函数中,您应该传递对 CString 的 const 引用,而不是 CString 值。因此,您可以避免不必要的复制。
【参考方案1】:
你可以如下使用:
str = *(pos->getName());
或
str = (*pos).getName();
希望能帮到你!
【讨论】:
以上是关于包含具有 CString 成员变量的类的集合仅存储首字母的主要内容,如果未能解决你的问题,请参考以下文章