背景:
我有一个基类“出版物”
使用派生类:
-电影
-书
-纸

基本上我必须重载运算符'+ =';以便能够将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"即可。

由于bookstd::shared_ptr<Publication>,所以book.operator+=()不存在,但是*bookPublication,上述构造是有效的,并且可以执行预期的操作。

关于c++ - 重载运算符 '+=',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34548933/

10-13 09:07