问题发生在我的ToDoList.cpp类文件中。
ToDoList.cpp:
ToDoList::ToDoList() {
arraySize = 3;
arrayData = 0;
array = new string(arraySize); //error here
}
ToDoList::ToDoList() {
array = new string(todolist.arraySize); //and error here
arraySize = todolist.arraySize;
arrayData = todolist.arraySize;
}
ToDoList.h:
class ToDoList {
public:
ToDoList();
ToDoList(const ToDoList&);
~ToDoList();
void AddItem(string item);
void ListItems();
private:
string* array;
int arraySize;
int arrayData;
};
如果你想要一个字符串数组,使用
array = new string[arraySize];
你应该使用
array = new string[arraySize];
和
array = new string[todolist.arraySize];
在你的例子中,你试图创建一个std::string类(string(arraysize))的对象,这是无效的。编译器给出了适当的错误来理解它
编辑
你的类可以使用std::vector来编写,这是高效、正确且易于理解的代码。
class ToDoList {
public:
ToDoList() {};
~ToDoList() {};
void AddItem(std::string& item);
void ListItems();
private:
std::vector<std::string> array;
};
void ToDoList::AddItem(std::string& item) {
array.push_back(item);
}
void ToDoList::ListItems() {
for(size_t i = 0; i<array.size(); i++) {
std::cout<<array[i]<<std::endl;
}
}
没有只有长度的std::string构造函数。如果你想初始化一个包含内容的字符串,你需要说明要使用什么字符。您可以使用new string(arraySize, fillCharacter),但考虑到这种用法,std::vector可能更合适。
编辑:额外的细节表明你正在尝试做一些不同的事情。看看其他答案。然而,它看起来像你试图重新发明一个矢量<字符串>因此,您可能会发现使用std::vector比手动分配字符串数组更容易。 字符串>