Исправление циклических зависимостей c ++ 17 заголовков - PullRequest
0 голосов
/ 07 января 2020

Я использую компилятор Clang C ++ 17 и получаю предупреждение:

declaration of 'struct Xchart' will not be visible outside of this function. 

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

Header toolkit.h объявляет функцию MyFunction, которая использует структуру Xchart в качестве входных данных. Это где предупреждающие точки.

toolkit.h

#ifndef _TOOLKIT_H
#define _TOOLKIT_H 1

#define _WINDOWS 1
#include <windows.h>

short WINAPI MyFunction(struct Xchart *mychart ); <--Warning Here

#pragma pack(push, 1)
#pragma pack(pop)
#endif /*_TOOLTKIT_H */

Заголовок mystruct.h объявляет структуру Xchart

mystruct. h

#ifndef _mystructs_h
#define _mystructs_h 1

#include "toolkit.h"

#pragma pack(push, 1)

struct Xchart { 
  int MyDays;   
  short LoadMe;   
  wchar_t MyLabel[100]; 
};

#pragma pack(pop)
#endif /* _mystructs_h */

Можете ли вы показать, как изменить эти два заголовочных файла, чтобы предупреждение было разрешено?

Ответы [ 2 ]

1 голос
/ 07 января 2020

Обычное исправление простое:

struct Xchart; // declares Xchart; definition is elsewhere.
short WINAPI MyFunction(Xchart *mychart); // Function declaration.

Только инструментарий. cpp потребуется определение Xchart, но сами файлы. cpp не включены в другом месте и не способствуют круглые включения.

0 голосов
/ 07 января 2020

Существуют две разные проблемы.

1) Ниже struct ключевое слово «problemmati» c здесь:

short WINAPI MyFunction(struct Xchart *mychart )

Это должно быть как ниже Xchart должно быть объявлено до этого:

short WINAPI MyFunction(Xchart *mychart )

Удалить ключевое слово из объявления.

2) Вы должны полностью изменить включение заголовка. mystruct.h должен быть включен в toolkit.h. Как вы хотите использовать структуру, определенную в mystruct.h. Удалите toolkit.h из моего строгого .h.

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