Инициализировать глобальными переменными в c ++ - PullRequest
1 голос
/ 05 августа 2020

Я попытался прочитать приведенную ниже ветку о создании глобальных переменных, которые можно использовать между несколькими файлами, но это не сработает.

Глобальная переменная в нескольких файлах

переменная.h

extern const int variable1;

file1.h

class fileOne{
private:
    fileTwo ft[variable1];
    
public:
    //some functions...
};

file2.h

class fileTwo{
private:
    //some variables
    
public:
    //some functions
};

main. cpp

int main(){
    int variable1 = 2;
    fileOne fo;
}

Когда я запускаю это, компилятор сообщает следующее:

error: array bound не является целочисленной константой перед токеном ']'

Можно ли объявить глобальную переменную и использовать ее описанным выше способом?

Также: это массив? fileTwo ft[variable1]; Является ли fileTwo классом?

Ответы [ 3 ]

1 голос
/ 05 августа 2020

Размер массива фиксированного размера должен быть указан во время компиляции, что означает, что может использоваться только константа времени компиляции. Вы не можете использовать переменную extern ed для размера массива, даже если она объявлена ​​как const, поскольку компилятор просто не знает фактического значения переменной, поскольку она находится в другой единице перевода.

Кроме того, в main.cpp вы не можете объявить переменную extern ed как локальную переменную, вместо этого она должна быть в глобальной области.

Для того, что вы пытаетесь делать, нет никакой причины использовать extern. Просто объявите variable1 с постоянным значением непосредственно в variable.h, а затем #include этот файл там, где это необходимо, например:

variable.h:

#ifndef VARIABLE_H
#define VARIABLE_H

static const int variable1 = 2;

#endif

file1.h:

#ifndef FILE1_H
#define FILE1_H

#include "file2.h"
#include "variable.h"

class fileOne{
private:
    fileTwo ft[variable1];

public:
    //some functions...
};

#endif

file2.h:

#ifndef FILE2_H
#define FILE2_H

class fileTwo{
private:
    //some variables

public:
    //some functions
};

#endif

основной. cpp:

#include "file1.h"

int main(){
    fileOne fo;
}
0 голосов
/ 05 августа 2020

Чтобы определить массив, вам необходимо указать фактический размер массива, и размер должен быть чем-то, что компилятор может превратить в константу. Поскольку variable1 не может быть преобразовано в константу, компилятор выдает ошибку.

Вы можете сделать что-то вроде следующего.

file1.h

class fileOne{
private:
    fileTwo ft[variable1];

public:
    //some functions...
};

file2.h

class fileTwo{
private:
    //some variables

public:
    //some functions
};

main. cpp

static const  int variable1 = 2;  // const int for the size of the ft array of class fileOne

#include "file2.h"  // class fileTwo definition is needed for class fileOne
#include "file1.h"  // class fileOne has a dependency on class fileTwo

int main(){
    fileOne fo;  // define a fileOne object named fo

    // do more stuff
}
0 голосов
/ 05 августа 2020

Можно ли объявить глобальную переменную и использовать ее описанным выше способом?

Да, но, как указал Реми, вам нужно переместить эту переменную в файл заголовка это будет #include d из file1.h

Также: Это массив? fileTwo ft[variable1];

Да, это называется C -массив. Стандартная библиотека C ++ также имеет массивы C ++ (т.е. фиксированного размера) с использованием std::array<type, size>, которые намного удобнее и безопаснее в использовании, а также такие контейнеры, как vector, list, et c.

Если вы хотите использовать массив C ++, вы можете объявить его следующим образом:

#include <array>

std::array ft<fileTwo, variable1>;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...