0

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 で定義されていません)

助けてくれてありがとう!!

4

2 に答える 2

0

関数のシグネチャは次のようになります

const char *GetString() const

最後に注意してくださいconst

今、あなたは「私はconstCStringインスタンスからconstcharポインタを返しています」と言っています。これは問題ありませんが、 const CStringインスタンスで使用できる関数を定義するように求められています。これは、最後のconst(関数パラメーターリストの後)が行うことであり、その関数を呼び出すことができることを指定します。const CString。_

const_iteratorその関数の両方のバージョンが必要な場合もありますが、特に、コンテナー自体の内部にあるものに関係なく、その内容をconstオブジェクトとして公開するため、ここで必要になります。

于 2012-08-23T21:24:16.967 に答える
0

GetString のプロトタイプは次のようになります。

const char *GetString() const;

最初の const は、呼び出し元が戻り値を変更できないことを意味します。2 番目の const は、このメソッドを a に対して呼び出すことができることを意味しconst CStringます。

一方、 operator< も変更して次を使用します。

bool operator<(const char *_cstr)
于 2012-08-23T21:32:26.083 に答える