比较c ++字符串

时间:2013-01-18 14:46:26

标签: c++ string compare

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 个答案:

答案 0 :(得分:5)

您的getAutherName()功能不是const,因此无法通过const Song&进行调用。像这样更改函数声明:

class Song {

public:
    const string getAutherName() const;
}

答案 1 :(得分:2)

您在const getAutherName()上呼叫Songs,因此您需要制作该方法const

const string getAutherName() const;

目前尚不清楚为何返回const string。要么返回string,要么将const引用返回到一个:

const string& getAutherName() const;
string getAutherName() const;

答案 2 :(得分:1)

std::stringbasic_string<char, std::char_traits<char>, std::allocator<char> >的typedef,编译器只是在错误消息中扩展typedef。

但是,为什么代码不起作用我不知道。您似乎已将部分错误消息剪切为'is。

答案 3 :(得分:0)

您需要向const添加getAutherName限定条件才能在const Song对象上调用它:

//| -- 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.