修复循环依赖 c++17 头文件
Fixing circular dependencies c++17 headers
我正在使用 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 */
您能否展示如何更改这两个头文件以解决警告?
有两个不同的问题。
1) 下面 struct
关键字在这里有问题:
short WINAPI MyFunction(struct Xchart *mychart )
应该像下面这样Xchart
应该在这之前声明:
short WINAPI MyFunction(Xchart *mychart )
从声明中删除关键字。
2) 您必须反转 header 包含。 mystruct.h 应包含在 toolkit.h 中。因为你想使用mystruct.h中定义的结构。从我的 strict.h.
中删除 toolkit.h
通常的修复很简单:
struct Xchart; // declares Xchart; definition is elsewhere.
short WINAPI MyFunction(Xchart *mychart); // Function declaration.
只有 toolkit.cpp 需要 Xchart
的定义,但 .cpp 文件本身不包含在其他地方,也不会导致循环包含。
我正在使用 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 */
您能否展示如何更改这两个头文件以解决警告?
有两个不同的问题。
1) 下面 struct
关键字在这里有问题:
short WINAPI MyFunction(struct Xchart *mychart )
应该像下面这样Xchart
应该在这之前声明:
short WINAPI MyFunction(Xchart *mychart )
从声明中删除关键字。
2) 您必须反转 header 包含。 mystruct.h 应包含在 toolkit.h 中。因为你想使用mystruct.h中定义的结构。从我的 strict.h.
中删除 toolkit.h通常的修复很简单:
struct Xchart; // declares Xchart; definition is elsewhere.
short WINAPI MyFunction(Xchart *mychart); // Function declaration.
只有 toolkit.cpp 需要 Xchart
的定义,但 .cpp 文件本身不包含在其他地方,也不会导致循环包含。