无法转换这个'指针...继承

时间:2015-12-04 02:44:48

标签: c++ inheritance

尝试从继承的类调用函数string SetToString(StringSet aSet);时出错。 基类的头文件:

#ifndef ITEM_H
#define ITEM_H

#include <ostream>
#include <set>
#include <string>


using namespace std;
typedef set<string> StringSet;

class Item
{
protected:
    string  title;
    StringSet keywords;
public:
    Item();
    Item(const string& title, const string& keywords);
    virtual ~Item();

    void addKeywords(string keyword);
    virtual ostream& print(ostream& out) const;
    string getTitle() const;

    string SetToString(StringSet aSet);

};

基类的实现文件:

#include "Item.h"
...
string Item::SetToString(StringSet aSet) {
    string key;
    int sizeCount = 0;

    for (auto const& e : aSet) {
        key += e;
        sizeCount++;
        if (sizeCount < aSet.size()) {
            key += ", ";
        }
    }
    SetToString(keywords);
    return key;
}
...

当我尝试在继承的类中执行string k = SetToString(keywords);时,我收到错误:Error C2662 'std::string Item::SetToString(StringSet)': cannot convert 'this' pointer from 'const Book' to 'Item &'。如何解决这个错误,为什么我会得到它?

1 个答案:

答案 0 :(得分:3)

Item::SetToString未标记为const,因此无法通过const指针或引用或const对象调用它。

您似乎试图从 标记为const的函数中调用它,因此无法修改当前对象(this),包括在其上调用非const函数。

使您的继承函数不是const,或者使基函数const