有没有办法在c ++中创建一个可变长度数组全局?

时间:2010-10-11 02:45:22

标签: c++ arrays function global-variables

我在一个函数中创建了一个可变长度数组,但是我需要在第二个函数中引用这个数组。当我将声明置于main()之上时,问题就出现了,因为它的长度尚未定义,我的编译器生气了。

人们通常如何解决这个问题?

修改

到目前为止,这是我的代码。

我需要使数组的 name [] midterm []和final [] 全局。他们全都在 student_input()

#include <iostream>
using namespace std ;

void student_input();
void student_output();

int i , ns ;

main(){

    int width,height,mult;

    cout << "Enter the number of students:" << endl;
    cin >> ns;

    i = 0 ;
    while( i < ns){
           i = i + 1 ;
           student_input();
           }

    i = 0 ;
    while( i < ns){
           i = i + 1 ;
           student_output();
           }

    system("pause");  
}

void student_input() {
    int si_i,si_midterm,si_final, midterm[ns + 1], final[ns + 1];
    string si_name, name[ns + 1]; 

    cout <<  endl <<  endl << "\t----- Student " << i << " -----" << endl << endl << endl;

    cout << "Enter name for student " << i << ":\t"<< endl;
    cin >> si_name;
    name[i] = si_name ; 

    cout << "Enter midterm score for student " << i << ":\t"<<  endl;

    cin >> si_midterm;
    midterm[i] = si_midterm ;

    cout << "Enter final exam score for student " << i << ":\t"<<  endl ;
    cin >> si_final;
    final[i] = si_final ;

    cout <<  endl <<  endl;

    si_i = 0 ;
    while (si_i < 7){
          si_i = si_i + 1; 
          cout << "Enter lab " << si_i <<" for student " << i << ":\t"<<  endl;
          }

    cout << name[i] <<  endl << midterm[i] <<  endl<<final[i] <<  endl;      
    return;
}

void student_output() {
    cout <<"hello! "<<  endl;
    return;
}

3 个答案:

答案 0 :(得分:13)

C ++不支持可变长度数组;要么你没有使用C ++,要么你正在使用特定于实现的语言扩展。

在C ++中,您应该使用std::vector作为动态大小的数组。

如果您需要从多个功能访问它,您可以:

  • 拥有需要访问vector的函数作为参数引用它,或者
  • 使vector成为一个类成员变量,并使所有需要访问它的函数成为该类的成员函数。

哪一个更有意义取决于你正在尝试做什么。

答案 1 :(得分:3)

std::vector出了什么问题?你不能在C ++中使用VLA(g ++虽然提供了它作为扩展)。

答案 2 :(得分:1)

查看向量,因为虽然你可以在c中,但在标准c ++中,没有办法使用可变长度数组。

另外,请查看除了流血之外的新IDE,例如Code :: Blocks,或者必要时,至少比流血更新版本的Dev c ++。

  
      
  1. 自2005年以来,Dev-C ++尚未更新,目前尚未更新   保持。该软件非常多。在我写作的时候   有340个已知错误永远无法修复。

  2.   
  3. 很难获得帮助,因为编程社区已经转向更新的软件。

  4.   
  5. Dev-C ++缺乏更现代化解决方案中的功能。码   完成,intellisense和适当的调试设施(其中   其他)没有提供。这些工具可以大大改善   有经验的程序员的工作流程和效率,并可能有助于   学习初学者。

  6.   
  7. 错误消息和解决所需的步骤   与更现代的解决方案相比,它们的记录很少   因为大多数程序员都可以从Dev-C ++开始   很难(如果不是不可能)找到能够帮助你的人。   有些问题可能根本无法解决。编译器   Dev-C ++中包含的内容非常过时,并且有错误。过时了   编译器可能导致错误和低效的代码,并可能是有害的   到初学者的学习过程。

  8.   
  9. 提供的“devpack”系统   现代图书馆不再支持。使用外部库   在Dev-C ++中,对于初学者来说,这可能是一个令人困惑和困难的过程   期待这个简单的系统为他们处理它。

  10.   

注意:初学者没有直接指向你,这是从这里得到的:http://clicktobegin.net/programming/why-you-shouldnt-use-dev-c/