Объявление sqlite :: database db (": memory:") в заголовке дает ошибку - PullRequest
1 голос
/ 21 мая 2019

Я разрабатываю пример программы с использованием sqlite_modern_cpp, представленной на их странице github.Я использую базу данных в памяти.

В моем последнем заявлении мне нужно сохранить эту базу данных в качестве частного члена моего класса.Я получаю сообщение об ошибке при объявлении объекта базы данных sqlite::database db(":memory:"); в качестве частного члена.Ошибка устраняется, когда я перемещаю объявление sqlite::database db(":memory:"); в исходный файл.

#include <memory>
#include <sqlite_modern_cpp.h>
class sqlitemoderncpp
{
private :
    sqlite::database db(":memory:");   //Declaring in header gives error but all errors are resolved when moded to source file
public:
    void run();
};

void sqlitemoderncpp::run(void)
{


try {
        db <<
            "create table if not exists user ("
            "   _id integer primary key autoincrement not null,"
            "   age int,"
            "   name text,"
            "   weight real"
            ");";
        int age = 21;
        float weight = 68.5;
        std::string name = "jack";
        this->db << "insert into user (age,name,weight) values (?,?,?);" 
            << age
            << name
            << weight;

        std::cout << "The new record got assigned id " << this->db.last_insert_rowid() << std::endl;

        db << "select age,name,weight from user where age > ? ;"
            << 18
            >> [&](int age, std::string name, double weight) {
            std::cout << age << ' ' << name << ' ' << weight << std::endl;
        };
    }
    catch (std::exception& e) {
        std::cout << e.what() << std::endl;
    }
}

Ошибка:

error C3867: 'sqlitecpp::db': non-standard syntax; use '&' to create a pointer to member 

error C2296: '<<': illegal, left operand has type 'sqlite::database (__cdecl sqlitecpp::* )(void)' 

error C2297: '<<': illegal, right operand has type 'const char [124]' 

error C3867: 'sqlitecpp::db': non-standard syntax; use '&' to create a pointer to member 

error C2296: '<<': illegal, left operand has type 'sqlite::database (__cdecl sqlitecpp::* )(void)' 

error C2297: '<<': illegal, right operand has type 'const char [51]' error 

C3867: 'sqlitecpp::db': non-standard syntax; use '&' to create a pointer to member error C2296: '<<': illegal, left operand has type 'sqlite::database (__cdecl sqlitecpp::* )(void)' 

error C2297: '<<': illegal, right operand has type 'const char [49]'

1 Ответ

1 голос
/ 21 мая 2019

Инициализатор члена по умолчанию (начиная с C ++ 11) работает только с инициализатором скобок или равно.Вы можете изменить его на

sqlite::database db{":memory:"};

или

sqlite::database db = sqlite::database(":memory:");

До C ++ 11 вы могли добавить конструктор со списком инициализаторов .

*.1012 *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...