填充动态创建的数组的问题

时间:2011-02-17 23:50:39

标签: c++ oop class

在下面的代码中,我尝试使用for循环初始化类Name的五个对象的成员book,使用从字符串数组{{1}获取的名称(在这种情况下用于测试目的的数字)。

Array

但是,每当我尝试编译代码时,都会出现以下错误:

#include <iostream>
#include <string>
using namespace std;

class book
{
private:
    string Name;
public:
    book();
    book(string&);
};

book :: book()
{}

book :: book(string& temp)
{
    Name = temp;
}

int main()
{
    string Array[] = {"1", "2", "3", "4", "5"};
    book *BookList = new book[5];
    for (int count = 0; count < 5; count ++)
    {
        BookList[count] = new book(Array[count]);
    }
    return 0;
}

我的目的是使用私有成员值创建一个对象数组,只有在循环收集相关数据后才能知道。我正在遵循answer #2 to a question I asked here previously中提供的建议。

2 个答案:

答案 0 :(得分:5)

book *BookList = new book[5]; 

BookList是一个包含五个book个对象的数组。

BookList[count] = new book(Array[count]); 

您正在尝试使用BookList,就好像它是一个包含book个对象的五个指针的数组。

BookList[count]不是指向count book的指针, count book

您是否考虑过使用其中一个标准库容器,例如std::vector

std::vector<book> BookList(5);

或者,如果您不想在知道它们之前插入book,则可以使用初始大小0创建它(通过删除(5)初始化程序并根据需要提供push_backinsert本书。

答案 1 :(得分:0)

BookList[count] = new book(Array[count]);

你基本上是这样做的:book = book*显然不起作用,因为它们是不同的类型。您可以删除new关键字:

BookList[count] = book(Array[count]);

这将创建一个临时book对象,并将其分配给BookList中的一本书。