Рейтинг:
6
Richard MacCutchan
Этот синтаксис находится в более поздней версии компилятора, чем тот, который предоставляется VS2008. Вам следует перейти на VS2019.
Josh_0101
Привет, есть ли какой-нибудь способ определить подобную структуру в VS2008?
Richard MacCutchan
Структура в порядке, это конструктор, который нуждается в изменении. Попробуйте выполнить следующие действия, используя круглые скобки, а не фигурные скобки вокруг значений инициализатора.
LISTDATA(const std::string& name, RECT rect): name_(name), rect_(rect) {}
Josh_0101
Я попробовал это сделать, синтаксические ошибки исчезнут. Но это вызовет другие ошибки для моего обратного вызова.
ошибка C2601: 'rect' : определения локальных функций являются незаконными
ошибка C2143: синтаксическая ошибка : отсутствует ';' перед '}'
ошибка C2065: 'name' : необъявленный идентификатор
ошибка....
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
char name[100];
RECT rect{0};
GetClassNameA(hwnd,name, sizeof(name));
::GetWindowRect(hwnd, &rect);
std::vector<listdata>* myVec = reinterpret_cast<std::vector<listdata>*>(lParam);
if (myVec) {
myVec->emplace_back(LISTDATA(std::string(name), rect));
} else {
return FALSE;
}
return TRUE;
}
<\pre>
Richard MacCutchan
Посмотрите на номер строки в сообщении об ошибке, и он подскажет вам, где проверить. И снова вы используете синтаксис, который не является допустимым в вашей версии компилятора.
RECT rect{0};
Josh_0101
Да, это 1 из проблем, которые я не знаю, как определить массив для `RECT` другим способом, чтобы сделать его допустимым в моей версии компилятора..
Richard MacCutchan
Вы не объявляете массив, вы просто объявляете одну переменную RECT. Но вам не нужно инициализировать его до нуля, так как первая ссылка находится на GetWindowRect(hwnd, &rect);
которая будет его заменить.
Если вы должны использовать современные функции C/C++, то вам нужно перейти на VS2019.
Josh_0101
Я вижу. Я думал, что это такой же массив, как и символ, и продолжаю искать решение для этого..
Как я могу объявить/инициализировать RECT в этом обратном вызове? До сих пор я не нашел примера для этой проблемы, и определенно я должен использовать VS2008, чтобы запустить его.
Richard MacCutchan
Как я уже сказал выше, он будет инициализирован вызовом GetWindowRect()
, поэтому он не нуждается в какой-либо предварительной инициализации. Все что вам нужно в коде это
RECT rect;
Я предполагал, что вы написали этот код, но ваши комментарии предполагают, что вы скопировали его откуда-то еще. Если я прав, то, возможно, стоит прояснить это в вашем вопросе.
Josh_0101
Спасибо, и это работает! Я получаю ошибку из-за какой-то опечатки, когда делаю изменения. Просто нуждаться RECT rect;
вместо RECT rect {0};