背景:
我有一个基类“出版物”
使用派生类:
-电影
-书
-纸
基本上我必须重载运算符'+ =';以便能够将String作者类型添加到特定的Publication(无论是书籍,电影还是纸张)。
在这三个类的每一个中,我都从Publication类继承。
出版物.h
#ifndef PUBLICATION_H
#define PUBLICATION_H
#include <string>
using std::string;
class Publication
{
public:
Publication(string aTitle, int aYear);
void addAuthor(const string & newAuthor);
Publication &operator+=(const string &);
private:
std::vector<string> otherAuthors;
};
#endif // PUBLICATION_H
Publication.cpp中的定义
void Publication::addAuthor(const string &newAuthor)
{
otherAuthors.push_back(newAuthor);
}
Publication &Publication::operator+=(const string &author)
{
Publication publication(title, year);
publication.addAuthor(author);
return *this;
}
Main.cpp
auto book = std::make_shared<Book>("The use of lambdas in modern programming", 2014, "Addison-Wesley");
book->addAuthor("Stephen Hawkings");
book+=("Another Author"); //Here using the overloaded operator "+="
我收到此错误:
error: no match for 'operator+=' (operand types are 'std::shared_ptr<Book>' and 'const char [5]')
book+=("Another Author");
^
基本上它没有加载重载的运算符,我不确定为什么
最佳答案
只需编写*book += "Another Author"
即可。
由于book
是std::shared_ptr<Publication>
,所以book.operator+=()
不存在,但是*book
是Publication
,上述构造是有效的,并且可以执行预期的操作。
关于c++ - 重载运算符 '+=',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34548933/