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

rec*_*gle 4 c++ arrays function global-variables

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

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

编辑:

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

我需要使数组的名称[] 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;
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 13

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

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

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

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

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

  • @Als:大多数(所有?)编译器支持非标准语言扩展,很少(没有?)编译器完全遵循语言标准.如果语言扩展可以关闭或默认关闭,我没有问题. (3认同)