совместное использование области глобальных переменных в нескольких файлах C ++ - PullRequest
0 голосов
/ 11 апреля 2020

У меня 2 файла . Глобальные переменные, объявленные в одной, не видны во второй.
Если я положу все это в один файл, тогда он будет работать .... но у меня есть 2 файла.

Я бы хотел, чтобы вывод был "1.0"

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
/*-------------------------------------------------------*/
class MsgGateway /* redeclared here like a header file */
  {
  public:
    MsgGateway();
    ~MsgGateway();
    void TestFunc(void);
  };
/*-------------------------------------------------------*/
struct settings_t
  {
  char Ver[4]="1.0";
  };
/*-------------------------------------------------------*/
settings_t ESPdata; /* This is the bugger */
MsgGateway* GWClass;
/*-------------------------------------------------------*/
int main(void) /* same as main in cpp */
{
GWClass = new MsgGateway();
GWClass->TestFunc();
return(0);
}
/*-------------------------------------------------------*/

file ScopeTestMore. cpp

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>

struct settings_t
  {
  char Ver[4]="1.0";
  };

class MsgGateway /* initial declaration here in the <header> would usually be */
  {
  public:
    MsgGateway();
    ~MsgGateway();
    void TestFunc(void);
  };

void MsgGateway::TestFunc(void)
{
printf("[%s]",ESPdata.Ver);
}

Вывод компилятора (G CC)

ScopeTestMore.cpp:23:22: error: 'ESPdata' was not declared in this scope
 Serial.printf("[%s]",ESPdata.Ver);
exit status 1
'ESPdata' was not declared in this scope

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Либо extern settings_t ESPdata во втором файле, либо объявите переменную inline и включите файл заголовка в оба cpps.

0 голосов
/ 11 апреля 2020

В C ++ у вас есть объявления и определения.

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

Вы должны определить переменную ровно в одном файле cpp (есть некоторые исключения из этого правила, но они не имеют отношения к данному контексту).

Подробнее подробности, например, здесь Объявление переменной против определения . Справочная информация о том, почему нам нужны объявления и определения: Как работает процесс компиляции / компоновки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...