Есть ли способ сделать массив переменной длины глобальным в C ++? - PullRequest
4 голосов
/ 11 октября 2010

Я создал массив переменной длины в одной функции, однако мне нужно сослаться на этот массив во второй функции. Проблема возникает, когда я помещаю объявление выше main (), видя, что его длина еще не определена, мой компилятор злится.

Как обычно это происходит?

EDIT:

Вот мой код.

Мне нужно сделать массив name [] midterm [] и final [] global. Они все в 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 ]

13 голосов
/ 11 октября 2010

C ++ не поддерживает массивы переменной длины;либо вы не используете C ++, либо используете расширение для конкретной реализации языка.

В C ++ вы должны использовать std::vector для динамически изменяемого массива.

Если вам нужно получить к нему доступ изнесколько функций, которые вы можете:

  • иметь функции, которым нужен доступ к vector, принимать ссылку на него в качестве аргумента или
  • сделать vector переменной члена классаи сделайте все функции, которые необходимы для доступа к нему, функциями-членами класса.

Какой из них имеет больше смысла, зависит от того, что именно вы пытаетесь сделать.

3 голосов
/ 11 октября 2010

Что не так с std::vector?Вы не можете иметь VLA в C ++ (хотя g ++ предоставляет его как расширение).

1 голос
/ 09 мая 2013

Посмотрите на векторы, потому что, хотя вы можете в c, в стандартном c ++ нет способа использовать массивы переменной длины.

Также, пожалуйста, посмотрите на новую среду IDE, отличную от кровопролития, такую ​​как Code :: Blocksили, если необходимо, по крайней мере, более новая версия Dev c ++, чем кровопролитие.

  1. Dev-C ++ не обновлялся с 2005 года и в настоящее время не поддерживается.Программное обеспечение очень глючит.На момент написания статьи было известно 340 ошибок, которые никогда не будут исправлены.

  2. Сложно получить помощь, потому что сообщество программистов перешло к более новому программному обеспечению.

  3. В Dev-C ++ отсутствуют функции, присутствующие вболее современные решения.Завершение кода, intellisense и надлежащие средства отладки (среди прочих) не предоставляются.Эти инструменты могут значительно улучшить рабочий процесс и эффективность работы опытного программиста, а также могут помочь обучению начинающих.

  4. Сообщения об ошибках и шаги, необходимые для их устранения, плохо документированы по сравнению с более современными решениями, и поскольку большинство программистов перешли с Dev-C ++, это может быть сложно (если не невозможно)найти любого, кто сможет вам помочь.Некоторые проблемы не могут быть решены вообще.Компилятор, включенный в Dev-C ++, очень устарел и глючит.Устаревший компилятор может привести к ошибочному и неэффективному коду и может повредить процессу обучения для начинающего.

  5. Предоставленная система «devpack» больше не поддерживается современными библиотеками.Использование внешних библиотек в Dev-C ++ может быть запутанным и сложным процессом для начинающих, которые ожидают, что эта простая система справится с ними за них.т прямо указал на вас, это было взято отсюда: http://clicktobegin.net/programming/why-you-shouldnt-use-dev-c/

...