无法转换为' const IMAGE_DOS_HEADER *'到'const PIMAGE_DOS_HEADER'

时间:2016-08-18 04:09:28

标签: c++ windows pointers winapi

注意:我知道如何解决这个问题。我正在写这个问题,以了解它为什么会发生。

好的,我收到此错误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;
};

error image

如果我从函数中移除const限定符(因此它变为const PIMAGE_DOS_HEADER get_header())或将返回值转换为PIMAGE_DOS_HEADER,则错误消失。我不明白的是,为什么在PIMAGE_DOS_HEADERIMAGE_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;

0 个答案:

没有答案