g++ warning: ISO C++ forbids converting a string constant to 'char*' при запуске sqlite

151
19 декабря 2019, 08:00

Запускаю простейший пример, c habr, иллюстрирующий работу с базой данных sqlite.

#include <iostream>
#include <stdio.h>
#include "sqlite3.h"
using namespace std;
const char* SQL = "CREATE TABLE IF NOT EXISTS foo(a,b,c); INSERT INTO FOO VALUES(1,2,3); INSERT INTO FOO SELECT * FROM FOO;";
int main(int argc, char **argv){
cout << "begining" << endl;
sqlite3 *db = 0; // хэндл объекта соединение к БД
char *err = 0;
// открываем соединение
if( sqlite3_open("my_db.db", &db) )
fprintf(stderr, "Ошибка открытия/создания БД: %s\n", sqlite3_errmsg(db));
// выполняем SQL
else if (sqlite3_exec(db, SQL, 0, 0, &err))
{
fprintf(stderr, "Ошибка SQL: %sn", err);
sqlite3_free(err);
}
// закрываем соединение
sqlite3_close(db);
cout << "end" << endl;
return 0;
}

Компилирую с помощью g++:

 g++ -o start_cpp start_cpp.cpp sqlite3.c

Получаю целую кучу ошибок, связанных с конвертацией типов в sqlite3.c. Например:

sqlite3.c:21495:1: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
sqlite3.c: In function 'void strftimeFunc(sqlite3_context*, int, sqlite3_value**)':
sqlite3.c:21929:29: error: invalid conversion from 'void*' to 'char*' [-fpermissive]
     z = sqlite3DbMallocRawNN(db, (int)n);

Как же правильно скомпилировать, чтобы не возникало такой проблемы?

Если убрать хэдер iostream и функции вывода cout, переименовать start_cpp.cpp в start.c и скомпилировать через gcc:

 gcc -o start start.c sqlite3.c

то всё работает!! НО! Для дальнейшей работы интересует именно .cpp файл, а не .c

Как правильно использовать sqlite3.h и sqlite3.c???

Answer 1

Вы собираете С файл компилятором С++. Для правильного использования sqlite3.c следует собрать отдельно компилятором C. Затем прилинковать в свой проект.

READ ALSO
Посчитать число слов в файле

Посчитать число слов в файле

Есть файлВ нём несколько строк

133
Microsoft Speech API для русского языка

Microsoft Speech API для русского языка

Я хотел поиграться с Microsoft Speech APIЗа основу взял код из этого ответа и всё получилось! Я пытался изменить грамматику для распознавания русского...

133
Отсортировать числа в масиве С++

Отсортировать числа в масиве С++

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

179
Можно ли разместить Java код на каком нибудь хостинге?

Можно ли разместить Java код на каком нибудь хостинге?

Есть готовый сервер написанный на Java сокетах, его цель обрабатывать запросы клиентов и возвращать им ответы, но проблема в том что компьютер...

153