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
!如何解决这个问题?
答案 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::string
是basic_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.