将对象指针添加到位于类中的指向对象的向量

时间:2015-03-13 05:03:14

标签: c++ class pointers inheritance vector

我正在尝试动态分配对象,然后将对象的指针添加到向量中。但是我得到错误: “从'库(*)()转换为非标量类型'库'请求”。我该如何纠正?

我已经包含了以下文件

//项目类

class Item
    private:
        std::string idCode;
        std::string title;
    public:
        Item(std::string idc, std::string t)
        {
            this->idCode=idc;
            this->title=t;
        };

//继承自Item类的Book类

class Book: public Item   //class inherits from parent Item
{
private:
    std::string author;
public:
    //constructor
    Book(std::string idcIn,std::string tIn,std::string authorIn)
    :Item(idcIn, tIn)
    {    author=authorIn;}
};

//包含

指针向量的库类
class Library
    private:
        std::vector<Item*>holdings;
    public:
        void addLibraryItem(Item* item)
        {
            holdings.push_back(item);
        }

这是主文件

void addItem(Library);  //prototype for adding Item function

int main()
{
    Library lib();  //create Library object

    addItem(lib);   //ERROR POINTS TO HERE

    return 0;
}

void addItem(Library lib)
{
    Item *ptr=new Book("bookID", "Title", "Author")
    lib.Library::addLibraryItem(ptr);
}         

感谢您的时间

3 个答案:

答案 0 :(得分:1)

Library lib();错了。该语句声明了一个函数lib,它返回Library并且不带参数

这应该是Library lib;

答案 1 :(得分:1)

Library lib()更改为Library lib

答案 2 :(得分:1)

您应该将函数addItem的定义更改为

void addItem(Library& lib)
{
    Item *ptr=new Book("bookID", "Title", "Author")
    lib.addLibraryItem(ptr);
}

能够调用引用的对象的方法addLibraryItem,而不是它的副本