MinGW x64 Добавление «A» в конец функции-члена

У меня есть следующий код:

// --- message_queue.hpp ---
namespace vca {
namespace keystone {
namespace messaging {
class VCA_KEYSTONE_DLL_PUBLIC MessageQueue final {
[...]
Message PeekMessage();  // <-- Declaration
[...]
};
}  // namespace messaging
}  // namespace keystone
}  // namespace vca

// --- message_queue.cpp ---
namespace vca {
namespace keystone {
namespace messaging {
Message MessageQueue::PeekMessage() {  // <-- Definition
[...]
}
}  // namespace messaging
}  // namespace keystone
}  // namespace vca

Я получаю следующую странную ошибку от MinGW-builds-4.8.1-x64-posix-seh:

..\..\lib\messaging\src\message_queue.cpp:281:35: error: no
'vca::keystone::messaging::Message vca::keystone::messaging::MessageQueue::PeekMessageA()'
member function declared in class 'vca::keystone::messaging::MessageQueue'
Message MessageQueue::PeekMessage() {
^

Меня смущает то, что PeekMessageA() функция не существует, где A родом из?

Если я удалю определение, оно будет скомпилировано, и я получу ожидаемые ошибки компоновщика:

lib\messaging\src\task.cpp.1.o: In function
`vca::keystone::messaging::Task::TaskImpl::PeekMessageA()':
../../lib/messaging/src/task.cpp:939:
undefined reference to `vca::keystone::messaging::MessageQueue::PeekMessageA()'
collect2.exe: error: ld returned 1 exit status

Это показывает, что A добавляется в Task::TaskImpl::PeekMessageA, Что это A и почему gcc не удается найти правильный символ при сборке файла?

0

Решение

Windows API предоставляет две версии многих функций, одна для NSI-кодированный и один для W Идеи струны. Как правило, опция компилятора и набор макросов заголовков будут отображать недекорированные имена в любую из двух версий, а также предоставлять подходящие определения TEXT а также _T макросы.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]