在下面的代码中,我尝试使用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中提供的建议。
答案 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_back
或insert
本书。
答案 1 :(得分:0)
BookList[count] = new book(Array[count]);
你基本上是这样做的:book = book*
显然不起作用,因为它们是不同的类型。您可以删除new
关键字:
BookList[count] = book(Array[count]);
这将创建一个临时book
对象,并将其分配给BookList中的一本书。