我里面有一个.h文件,我有一个函数,该函数使用Struct / Class构造函数作为默认参数。
它出现在声明的结尾,就像在这里回答:Where to put default parameter value in C++?
函数声明
vector<UINT_PTR> scan(const ScanOptions& scan_options = ScanOptions());
结构定义
struct ScanOptions {
ScanOptions()
{
//Use some Windows.h functions here to find values
SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
start_address = sysinfo.lpMinimumApplicationAddress;
end_address = sysinfo.lpMaximumApplicationAddress;
}
UINT_PTR start_address;
UINT_PTR end_address;
};
在这里回答:
该文件的私有结构应放在.c文件中,如果.h中的任何功能使用它们,则在.h文件中带有声明。
Should struct definitions go in .h or .c file?
似乎没有办法只声明结构来向前声明它?
C++, how to declare a struct in a header file
那么我是将结构的声明和定义保留在标头中还是有其他建议的方法?
我的意思是,自从它开始运作以来,我并不十分在意它的全球化,我也不认为它会导致问题,但是我真的想知道。
答案 0 :(得分:2)
如果您使用
vector<UINT_PTR> scan(const ScanOptions& scan_options = ScanOptions());
在.h文件中,则ScanOptions
的定义必须在函数声明时可见。
但是,您可以重载该函数,而不是使用默认参数。
vector<UINT_PTR> scan();
vector<UINT_PTR> scan(const ScanOptions& scan_options);
理解第一个函数将使用默认构造的ScanOptions
来完成其工作。进行此更改后,您可以在.h文件中转发声明ScanOptions
并仅在.cpp文件中定义它。
以下内容完全正确,不需要在{.h文件中包含ScanOptions
的定义。
struct ScanOptions;
vector<UINT_PTR> scan();
vector<UINT_PTR> scan(const ScanOptions& scan_options);