从'int'到'const char*'问题C++的转换无效



问题发生在我的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比手动分配字符串数组更容易。

最新更新