请在使用新运算符时遇到问题
Trouble using the new operator please
我正在查看错误:
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
时,您正在处理指针。如果你还不知道如何使用指针,那么你绝对必须首先学习如何使用它们。
相关文章:
- 编译包含字符串的代码时遇到问题
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 从其他类访问类时遇到问题
- 使用静态成员声明类时遇到问题
- C++ 填充数组时遇到问题
- 在将字符串放入字符串向量时遇到问题?
- 余数除法和不允许除以零 (c++) 时遇到问题
- 我在C++中使用 getline() 函数时遇到问题
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 在我的四叉树实现中遇到问题
- 在 c++ 中循环遍历数组时遇到问题
- 使用 MinGW 在 Windows 上构建 GLEW 时遇到问题
- 编译 Cilk Plus 程序时遇到问题
- 存储另一个函数返回的布尔数组时遇到问题
- 我在 OpenGL 中显示图像时遇到问题
- 我在解决此错误时遇到问题.我正在努力在主函数中传递数组
- 在 for 循环中更新两个变量时遇到问题C++
- 为什么我的程序在打开网络设备时遇到问题
- 在 Tensorflow C++ 中使用 FIFOQueue 时遇到问题
- 为什么我在虚幻引擎中的多态性和接口方面遇到问题?