注意:我知道如何解决这个问题。我正在写这个问题,以了解它为什么会发生。
好的,我收到此错误C2440 'return': cannot convert from 'const IMAGE_DOS_HEADER *' to 'const PIMAGE_DOS_HEADER'
。谁能告诉我为什么?
这里的问题是,正如您可能知道的那样,PIMAGE_DOS_HEADER
被定义为typedef IMAGE_DOS_HEADER *PIMAGE_DOS_HEADER
所以它们基本上是相同的。
这是一个提供该错误的简单代码:
class TestClass
{
public:
const PIMAGE_DOS_HEADER get_header() const
{
return &hdr;
}
IMAGE_DOS_HEADER hdr;
};
如果我从函数中移除const
限定符(因此它变为const PIMAGE_DOS_HEADER get_header()
)或将返回值转换为PIMAGE_DOS_HEADER
,则错误消失。我不明白的是,为什么在PIMAGE_DOS_HEADER
为IMAGE_DOS_HEADER*
typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header
WORD e_magic; // Magic number
WORD e_cblp; // Bytes on last page of file
WORD e_cp; // Pages in file
WORD e_crlc; // Relocations
WORD e_cparhdr; // Size of header in paragraphs
WORD e_minalloc; // Minimum extra paragraphs needed
WORD e_maxalloc; // Maximum extra paragraphs needed
WORD e_ss; // Initial (relative) SS value
WORD e_sp; // Initial SP value
WORD e_csum; // Checksum
WORD e_ip; // Initial IP value
WORD e_cs; // Initial (relative) CS value
WORD e_lfarlc; // File address of relocation table
WORD e_ovno; // Overlay number
WORD e_res[4]; // Reserved words
WORD e_oemid; // OEM identifier (for e_oeminfo)
WORD e_oeminfo; // OEM information; e_oemid specific
WORD e_res2[10]; // Reserved words
LONG e_lfanew; // File address of new exe header
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;