WindowsソフトウェアをLinuxに移植する必要があるため、いくつかのWindowsのMFCクラスを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があります...だから私はそれを取得しません...どんな助けも大歓迎です
注: std::string で直接変更するのではなく、独自の CString クラスを使用しています。これは、移植したいコードが大きすぎるため、最小限の変更を加えたいからです。(また、CString で定義されている一部の関数は std::string で定義されていません)
助けてくれてありがとう!!