我在看错误:
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";
}
}
我搜索了如何使用new运算符,但我不确定为什么示例会继续使用*
或**
。
正如您可能看到的那样,我正在尝试获取一个菜单,以显示文件中的员工列表。然后,我将使用该菜单选择一名员工并完成其他任务。
答案 0 :(得分:2)
std::string names[lines];
C ++(甚至VS中的C)并不支持这一点。
您可以使用
std::vector<std::string> names(lines);
或
std::string *names = new std::string [lines];
...
delete [] names;
答案 1 :(得分:0)
你想在那里使用矢量。 C和C ++中的数组有点奇怪。仅在C99(而非C ++)中引入了对动态长度的自动存储阵列的支持。请注意自动(在大多数系统上解析为&#34;堆栈&#34;),因此这会产生一个非常强大的约束并且会引发许多警告。使用C ++时,应尽可能避免使用数组。请改用std::vector
。使用起来更好,为您提供了幕后的内存管理功能,并且可以正常使用#34; (除非你用std::vector
分配一个new
,在我看来,这只是有悖常理的)std::vector
的现代实现做自动引用计数,这样如果你在实际元素周围复制向量是仅在修改时复制(CoW);这比普通数组给你的好多了。所以就这样了。
替换此
std::string names[lines];
用这个
std::vector<std::string> names(lines);
我搜索了如何使用new运算符,但我不确定为什么示例会继续使用*或**。
因为在处理new
时你正在处理指针。如果您还不知道如何使用指针,那么您绝对必须首先学习如何使用它们。