глобальные переменные c++ в нескольких файлах
у меня есть код, разбросанный по трем файлам, и я хотел бы использовать четвертый файл "gloabls" для хранения некоторых физических констант, таких как значение pi. Это позволит избежать повторяющихся определений pi = 4*atan(1.0)
. После того, как я попробовал создать глобальный файл заголовка:
/*globals.h*/
extern double g_pi;
и глобальный cpp-файл:
/*globals.cpp*/
#include "math.h"
#include "globals.h"
double g_pi = 4*atan(1.0);
затем я включаю этот файл в свои основные файлы:
/*mainFile.cpp*/
//Include math and other libraries
#include globals.h"
int main() {
/*
....
*/
double x = 2*g_pi
/*
....
*/
}
это дает мне неопределенную ошибку ссылки на g_pi. Я использую компилятор g++ на Ubuntu. Надеюсь, это простое исправление! Ваши предложения очень ценятся. Если понадобится больше подробностей, я буду рад предоставить их.
4 ответов
вы можете просто использовать M_PI из include (есть и другие константы).
Edit: ваша настройка верна. Я получил рабочий пример minmal:
глобалы.h
extern double g_tst;
глобалы.cpp
#include "globals.h"
double g_tst = 4.0;
main.cpp
#include "globals.h"
#include <stdio.h>
#include <stdlib.h>
int main()
{
fprintf (stderr, "g_tst = %lf \n", g_tst);
return 0;
}
проблема находится в вашей buildsystem
посмотреть Википедия
Я думаю, проблема в том, что у вас есть #include gobals.h вместо #включить глобалы.h. Это даст вам неопределенные ссылки, потому что он не вставляет глобалы.h. Прекомпилятор C++ не терпит неудачу, когда он не может найти файл заголовка. Вместо этого вы получаете неопределенное ссылочное сообщение при компиляции.
g_pi musst не объявляется extern в одной единице перевода. Вы можете использовать небольшой #define для этого
в Globals.cpp
#define MY_EXTERN_CPP
в /*глобальные переменные.h
#ifdef MY_EXTERN_CPP
#define MY_CONFIGURATION_EXTERN
#else
#define MY_CONFIGURATION_EXTERN extern
#endif
MY_CONFIGURATION_EXTERN double g_pi;
таким образом, g_pi будет extern во всех единицах перевода, которые вы включаете, кроме глобалов.cpp