3
class Song {

public:
    const string getAutherName();
}

void mtm::RadioManager::addSong(const Song& song,const Song& song1) {

    if (song.getAutherName() == song1.getAutherName())

}

次のエラーが表示されます。

Invalid arguments ' Candidates are: std::basic_string<char,std::char_traits<char>,std::allocator<char>> getAutherName() ' - passing 'const mtm::Song' as 'this' argument of 'std::string mtm::Song::getAutherName()' discards qualifiers [- fpermissive]

なぜそれは使用していて、使用basic_stringしていないのですかstring! これを修正するには?

4

4 に答える 4

5

getAutherName()関数は ではないconstため、 を介して呼び出すことはできませんconst Song&。関数宣言を次のように変更します。

class Song {

public:
    const string getAutherName() const;
}
于 2013-01-18T14:52:32.250 に答える
2

getAutherName()constを呼び出してSongsいるため、そのメソッドを作成する必要がありますconst

const string getAutherName() const;

を返す理由は明らかではありませんconst string。を返すかstring、いずれかへの const 参照を返します。

const string& getAutherName() const;
string getAutherName() const;
于 2013-01-18T14:53:06.067 に答える
1

std::stringの typedef でbasic_string<char, std::char_traits<char>, std::allocator<char> >ある場合、コンパイラはエラー メッセージで typedef を展開しているだけです。

ただし、コードが機能しない理由はわかりません。エラーメッセージの ' の部分を切り取ったようです。

于 2013-01-18T14:51:37.800 に答える
0

constオブジェクトで呼び出せるようにするには、const修飾を追加する必要があります。getAutherNameSong

//| -- Returns a `const` `string` (this is bad practice
//v    because it inhibits optimization)
const string getAutherName() const;
// Can be called on a `const`    ^
// `Song`. This is good practice |
// because it it allows `getAutherName()`
// to be used in more places, and it encourages
// const-correctness.
于 2013-01-18T22:53:00.510 に答える