Не удалось разрешить символ в Visual Studio 2015 [дубликат]

Просто, чтобы дать общий ответ здесь обо всех трех API MYSQL со ссылкой:

Вы не можете смешивать ни одно из трех ( mysql_* , mysqli_* , PDO ) API MYSQL от PHP вместе, он просто не работает. Это даже в справочнике FAQ :

Невозможно смешать расширения. Например, передача mysqli в PDO_MySQL или ext / mysql не будет работать.

blockquote>

Вам нужно использовать тот же API MySQL и связанные с ним функции, от подключения к запросам .

19
задан Timmetje 4 July 2013 в 10:49
поделиться

3 ответа

Да, вы можете включить заголовки C в код C ++. Это нормально, чтобы добавить это:

#ifdef __cplusplus
extern "C"
{
#endif

// C header here

#ifdef __cplusplus
}
#endif

, чтобы компилятор C ++ знал, что объявления функций и т. Д. Должны рассматриваться как C, а не C ++.

32
ответ дан RichieHindle 22 August 2018 в 06:27
поделиться
  • 1
    Woah, я не знал этого. Настолько потрясающе, спасибо! – SadSeven 3 July 2013 в 13:35
  • 2
    Обратите внимание, что это не означает «компилировать этот код как C». Это означает, что все символы между скобками имеют C-связь (что означает, среди прочего, не выполнять на них C ++ name mangling ). – Medinoc 3 July 2013 в 13:38

Если вы компилируете код C вместе, как часть вашего проекта, с кодом на C ++, вам просто нужно включить заголовочные файлы, как обычно, и использовать режим компиляции C ++ для компиляции кода, однако некоторые C-код не будет компилироваться с использованием компилятора C ++ (например, использование функции malloc требует кастинга).

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

Здесь есть два варианта: вы сами редактируете сам файл заголовка, добавляете

#ifdef __cplusplus 
extern "C" {
#endif

... original content of headerfile goes here. 

#ifdef __cplusplus 
}
#endif

Или, если у вас нет возможности редактировать эти заголовки, вы можете использовать эта форма:

#ifdef __cplusplus 
extern "C" {
#endif
#include <c_header.h>"
#ifdef __cplusplus 
}
#endif
12
ответ дан Mats Petersson 22 August 2018 в 06:27
поделиться

Да, но вам нужно сообщить компилятору C ++, что объявления из заголовка C:

extern "C" {
#include "c-header.h"
}

. Многие заголовки C уже включены, завернуты в #if defined __cplusplus. Это, возможно, немного странно (синтаксис C ++ в заголовке C), но это часто делается для удобства.

8
ответ дан unwind 22 August 2018 в 06:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: