2012-05-16 54 views
-1

我與MFC的工作組和我有這個類:
含有類CString成員變量只存儲第一個字母

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獲取值successfuly但是當我在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); 
+3

爲什麼不把代碼插入'set'中? –

+0

恩,那麼'套'的東西呢? –

+0

與實際問題無關,但在所有設置的函數中,您應該將一個const引用傳遞給CString,而不是CString值。因此,您避免了不必要的複製。 – MikMik

回答

0

您可以按如下方式使用:

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

str = (*pos).getName(); 

希望能幫到你!

+0

哇!第二個工作!非常感謝。 :) –

相關問題