2016-02-26 73 views
-3

我一直在寻找错误故障:使用new运算符,请

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"; 
    } 
} 

我已搜查了如何使用新的运营商,但我不知道为什么例子继续使用***

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

+4

使C++代码在Visual Basic上工作将是非常艰巨的任务。 – MikeCAT

+0

变长数组不是可移植的C++代码。 – songyuanyao

+0

你介意使用'std :: vector'吗? – MikeCAT

回答

2
std::string names[lines]; 

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

您可以使用

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

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

你想用一个向量那里。 C和C++中的数组有点奇怪。只有C99(而不是C++)支持自动动态长度的存储阵列已被引入。注意自动(在大多数系统上解析为“堆栈”),所以这提出了一个非常强大的约束和许多注意事项。在使用C++时,应尽可能避免使用数组。改为使用std::vector。使用更好,给你后台的内存管理,“正常工作”(除非你分配std::vectornew,在我看来,这只是不正当的)和std::vector现代实现做自动引用计数,如果你围绕实际元素的复制向量仅在修改(CoW)时被复制;这比普通数组提供的更好。所以在这里。

与此

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

I searched on how to use the new operator, but I'm not sure why the examples keep using * or **.

替换此

std::string names[lines]; 

因为与new打交道时,你处理指针。如果你不知道如何使用指针(还),那么你绝对必须先学习如何使用它们。

+0

好的。我希望我可以使用这个区域的数组。我的C++组赋值要求我们在程序的某个地方使用一个数组。我们的程序是一个工资处理程序,对于我来说,我不知道数组在哪里有用。感谢您的帮助。 –

+0

@SeanOoley:啊,这是作业。那么在这种情况下,整个任务的重点就是,您将学习如何使用指针和动态内存分配(即'new'和'delete')。 – datenwolf

相关问题