问题出现在我的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;
};
答案 0 :(得分:2)
你应该使用
array = new string[arraySize];
和
array = new string[todolist.arraySize];
在您的示例中,您尝试创建一个无效的std :: string类(string(arrraySize))对象。编译器给出了相应的错误来理解它。
修改强>
您的课程可以使用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;
}
}
答案 1 :(得分:2)
如果您想要一个字符串数组,请使用
array = new string[arraySize];
答案 2 :(得分:1)
没有std :: string构造函数只有一个长度。如果要初始化包含其中某些内容的字符串,则需要说出要使用的字符。你可以使用新的字符串(arraySize,fillCharacter),但考虑到这种用法,也许std :: vector可能更合适。
编辑:额外的细节显示您正在尝试做一些不同的事情。所以看其他答案。但是看起来你正试图重新发明一个向量&lt; string&gt; ,所以你可能会发现使用std :: vector更容易,而不是手动分配你的字符串数组。