'initializing': невозможно преобразовать из 'EVENTLOGRECORD *' в 'EVENTLOGRECORD []' - PullRequest
0 голосов
/ 07 апреля 2019

при попытке создать массив:

EVENTLOGRECORD logs[] = new EVENTLOGRECORD[dwEventLogRecords];

выдает ошибку 'преобразование': невозможно преобразовать из 'type1' в 'type2'. Не знаю, как это исправить, помогите.

#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 голосов
/ 08 апреля 2019

В C ++ нет неявного преобразования указателей в типы массивов. Они похожи, но не идентичны. Массивы могут распадаться на указатели, но не работают наоборот, так как информация теряется в пути - указатель просто представляет адрес памяти, а массив представляет адрес непрерывной области, обычно с определенным размером.

Предлагаю прочитать раздел 6 c-faq .

Кроме того,

type *a and type b[]

a - это переменная, которая должна выделять пространство памяти для хранения, а b - это метка в программе, которая предоставляет адресную информацию компилятору без сохранения. Таким образом, вы можете изменить a в программе, но вы не можете изменить b, который нельзя изменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...