внешняя переменная в иерархии заголовочного файла

Почему я не могу получить доступ к значению переменной, определенному в файле file.cpp. Предполагая, что он связан с main. Сложность заключается в том, что значение переменной включается косвенно. Основная функция включает в себя header1.h, который, в свою очередь, включает file.h, который имеет значение переменной extern. Можно ли распространять extern в такой цепочке заголовков

1) файл.h

extern int value;

2)файл.cpp

#include "file.h"
int value = 25;

3) заголовок1.ч

#include "file.h"
const int const_value = 100;

4) main.cpp

#include "header1.h"
int main(char *argv[], int args) {
int result = value*10;      
    return result;
}

person user1992416    schedule 19.01.2013    source источник
comment
Какую именно ошибку вы получаете? Вы уверены, что компоновщику переданы объекты как из file.cpp, так и из main.cpp?   -  person aschepler    schedule 19.01.2013


Ответы (1)


Да, extern можно распространять таким образом. Компилятору нужно только увидеть, что переменная объявлена ​​extern в момент использования, не имеет значения, через какой заголовок. Содержимое заголовочных файлов просто вставляется в начало исходного файла препроцессором. Таким образом, компилятор даже не знает о файлах заголовков.

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

Просто включите file.h в main.cpp, и это будет намного более интуитивно понятно для читателей вашего кода.

person Alok Save    schedule 19.01.2013
comment
Хотя это может показаться разумным советом для общего случая, я не уверен, что это так, когда вы выходите за рамки надуманных примеров. - person Lightness Races in Orbit; 19.01.2013
comment
@LightnessRacesinOrbit: согласен. Всегда есть компромисс. Даже заголовки стандартных библиотек, как правило, косвенно включают множество заголовков. - person Alok Save; 19.01.2013