Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there any way to make a variable length array global in c++?

I've created a variable length array in one function, however I need to refer to this array in a second function. The problem occurs when I put the declaration above main() seeing as its length hasn't been defined yet, my compiler gets angry.

How does one typically go about this?

EDIT:

Here is my code so far.

I need to make the array's name[] midterm[] and final[] global. They're all in 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;
}
like image 860
rectangletangle Avatar asked Dec 04 '22 11:12

rectangletangle


1 Answers

C++ does not support variable length arrays; either you are not using C++ or you are using an implementation-specific language extension.

In C++ you should use std::vector for a dynamically sized array.

If you need to access it from multiple functions you can:

  • have the functions that need access to the vector take a reference to it as an argument, or
  • make the vector a class member variable and make all the functions that need to access it member functions of the class.

Which one makes more sense depends on what, exactly, you are trying to do.

like image 105
James McNellis Avatar answered Dec 28 '22 22:12

James McNellis