'正在初始化':无法从'EVENTLOGRECORD *'转换为'EVENTLOGRECORD []'

时间:2019-04-07 11:19:32

标签: c++ winapi

当我尝试创建数组时:

EVENTLOGRECORD logs[] = new EVENTLOGRECORD[dwEventLogRecords];

它给出错误“转换”:无法从“类型1”转换为“类型2”,我不知道该如何解决,请帮忙。

#include <Windows.h>

void main() {
    DWORD dwEventLogRecords;
    HANDLE hEventLog = OpenEventLogA(0,"System");
    GetNumberOfEventLogRecords(hEventLog, &dwEventLogRecords);
    int numberOfBytes = sizeof(EVENTLOGRECORD)*dwEventLogRecords;
    EVENTLOGRECORD logs[] = new EVENTLOGRECORD[dwEventLogRecords];
    ReadEventLog(hEventLog, EVENTLOG_SEEK_READ | EVENTLOG_FORWARDS_READ,0,logs, numberOfBytes, 0, 0);
}

1 个答案:

答案 0 :(得分:0)

在C ++中,没有从指针到数组类型的隐式转换。它们相似但不相同。数组可以衰减到指针,但是由于信息丢失,它无法正常工作-指针仅代表内存地址,而数组代表连续区域的地址,通常具有特定大小。 / p>

我建议阅读c-faq的第6节。

此外,

type *a and type b[]

a是一个变量,需要分配用于存储的内存空间,而b是程序中的一个标签,该标签在不保存的情况下向编译器提供地址信息。因此,您可以在程序中更改a,但不能更改不可修改的b