请在使用新运算符时遇到问题

Trouble using the new operator please

本文关键字:遇到 问题 运算符      更新时间:2023-10-16

我正在查看错误:

C2131: expression did not evaluate to a constant

并看到需要新的运算符,以便我可以在 MSVB 中创建动态数组。我的代码在 Dev-C++ 中运行良好,但我希望它在 MSVB 中工作。

int lines_in_file()
{
    int number_of_lines = 0;
    std::string line;
    std::ifstream menu_file;
    menu_file.open("menu.dat");
    while (getline(menu_file, line))
        ++number_of_lines;
    menu_file.close();
    return number_of_lines;
}
void employee_menu()
{
    int lines = lines_in_file();
    int choice;
    std::string names[lines];
    std::ifstream menu_file;
    menu_file.open("menu.dat");
    for (int i = 0; i <= lines - 1; i++)
    {
        getline(menu_file, names[i]);
    }
    for (int i = 0; i <= lines - 1; i++)
    {
        std::cout << "Name " << i + 1 << ": " << names[i] << "n";
    }
}

我已经搜索了如何使用新运算符,但我不确定为什么这些示例一直使用 *** .

正如您可能看到的,我正在尝试获取一个菜单以显示文件中的员工列表。然后,我将使用该菜单选择员工并执行进一步的任务。

std::string names[lines];

C++(甚至 VS 中的 C)都不支持这一点。

您可以使用

std::vector<std::string> names(lines);

std::string *names = new std::string [lines];
...
delete [] names;
你想

在那里使用一个向量。C 和 C++ 中的数组有点奇怪。仅在 C99(而不是 C++)中引入了对动态长度自动存储阵列的支持。请注意自动(在大多数系统上解析为"堆栈"),因此这对其施加了非常强大的约束和许多警告。使用C++时,应尽可能避免使用数组。请改用std::vector。使用起来更好,为您提供"正常工作"的幕后内存管理(除非您使用 new 分配一个std::vector,在我看来,这很反常)和std::vector的现代实现会自动引用计数,以便如果您复制实际元素周围的向量,则仅在修改时复制 (CoW);这比普通数组给你的要好得多。所以它来了。

替换此

std::string names[lines];

有了这个

std::vector<std::string> names(lines);

我搜索了如何使用 new 运算符,但我不确定为什么示例一直使用 * 或 **。

因为在处理new时,您正在处理指针。如果你还不知道如何使用指针,那么你绝对必须首先学习如何使用它们。