包含具有 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&lt;CUnit&gt; 时,当我返回 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&lt;CUint&gt; 的东西在哪里? 与实际问题无关,但在所有 set 函数中,您应该传递对 CString 的 const 引用,而不是 CString 值。因此,您可以避免不必要的复制。 【参考方案1】:

你可以如下使用:

    str = *(pos->getName());

    str = (*pos).getName();

希望能帮到你!

【讨论】:

以上是关于包含具有 CString 成员变量的类的集合仅存储首字母的主要内容,如果未能解决你的问题,请参考以下文章

在构建导出包含ATL :: CString成员的类的DLL时发出警告C4251

包含另一个类作为成员变量的类的构造函数

在另一个类中声明具有成员初始化器的类的实例

如何访问其子类中的类的私有变量?

如何在 C++ 中运行具有仅调用线程的函数的类的多个对象?

OC学习--OC中的类--类的定义,成员变量,方法