Переопределение strdup \ Function уже имеет тело

Я работаю над небольшим проектом, чтобы попытаться заставить код Source Engine 2013 работать в IDE Qt Creator. Моя конечная цель — превратить его в проект CMake, чтобы избавиться от ограниченной системы VPC Valve, хотя я пока точно не знаю, как это работает, поэтому я делаю простые шаги.

Я привык к компиляции в компиляторе MSVC ++ 2013, так что это то, что я использую, и я столкнулся с этой последней проблемой, я не знаю, как с этим справиться. Что я собираюсь сделать в первую очередь, если он не компилируется прямо под его намеченным компилятором, я, очевидно, делаю это неправильно, и мне пока не нужно изменять код.

У Valve есть этот memoverride.cpp, в котором есть char * __ cdecl _strdup (const char * string), который, если я его закомментирую, скомпилируется просто отлично, так что это последняя проблема, с которой я столкнулся.

Из этой функции «переопределить» я получаю следующие две ошибки:

C2084: функция ‘char MemAlloc_StrDup (const char) уже есть тело

C2732: спецификация связи противоречит более ранней спецификации для MemAlloc_StrDup

Кто-нибудь знает какую-либо необходимую опцию компилятора, какую-то библиотеку по умолчанию, которую следует исключить, или определение препроцессора, которое я должен использовать, чтобы обойти это? Я попытался скомпилировать код в Visual Studio и отключил подавленный баннер запуска, чтобы я мог видеть все параметры, которые он пропускал, но я попробовал их все, но, похоже, это не имело никакого значения.

Так у кого-нибудь есть идея?

Любая информация будет принята с благодарностью, спасибо!

-4

Решение

Проблема с дублирующим определением MemAlloc_StrDup / strdup вероятно, вызвано тем, что вы не можете иметь два определения strdup, Не существует опции компилятора MSVC ++, которая решает именно это.

Он может «работать» на других компиляторах, потому что правило One Definition Rule не требует от компилятора завершать работу с сообщением о фатальной ошибке или даже выдавать предупреждение. Но MSVC ++ имеет полное право просто отказаться от этого.

MSVC ++ позволяет не связывать свою стандартную библиотеку. Это вряд ли решит вашу проблему, так как это вариант «все или ничего».

0

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

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

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