我試圖端口一些窗口「S MFC類Linux,因爲我有端口的Windows軟件的Linux。STL地圖常量性和g ++錯誤
這裏是我需要將代碼移植
165: SMapCI it = _s$.find("nchairs");
166: if (it==_s$.end()) return 10;
167: int n = strtoul(it->second.text.GetString(), NULL, 10);
和_s $和SMapCI都是這樣
typedef std::map<CString, STablemapSymbol> SMap;
SMap _s$;
typedef SMap::const_iterator SMapCI;
如此定義,這裏是我的CString類
class CString {
protected:
std::string str;
public:
CString(const char *_cstr) { str = _cstr;; };
bool operator<(char *_cstr) const { return str < _cstr;};
const char *GetString() { return str.c_str();};
};
,當我建立我的代碼,我得到以下錯誤:
CTablemap/CTablemap.h:167:54: error: passing ‘const CString’ as ‘this’ argument of ‘const char* const CString::GetString()’ discards qualifiers [-fpermissive]
我不明白這個錯誤。 G ++文件說,
passing 'const OBJECT' as 'this' argument of 'FUNCTION' discards qualifiers
*Message found in GCC version 4.5.1
*you're returning an address
*you're attempting to access a container element with a const_iterator using a member function that has no non-const versions. The non-const function does not guarantee it will not alter the data
但是......我GetString函數被定義爲「爲const char *」,所以我有const關鍵字... 所以我不明白這一點...任何幫助將更受歡迎
注意:我使用我自己的CString類,而不是直接用std :: string改變它,因爲我想要移植的代碼太大了,我想對它做最小的修改。 (和CString中定義的一些函數沒有在std :: string中定義)
在此先感謝您的幫助!
哦...你是正確的...謝謝:) – ramone