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,因此不能通过 a 调用它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. 要么返回 a 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限定以getAutherName允许在 constSong对象上调用它:

//| -- 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 回答