我正在尝试将一些 windows 的 MFC 类移植到 linux,因为我必须将 windows 软件移植到 linux。
这是我需要移植的代码
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 中定义)
提前感谢您的帮助!