0 / 0 / 0
Регистрация: 18.07.2023
Сообщений: 27
1

Не видно класс при компиляции . is not a member of

28.07.2023, 19:28. Показов 2463. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Надеюсь, что пишу в нужный раздел.
Пытаюсь протестировать подключение к Sqlite3 на базе примера от фреймворка Wt, но возникает ошибка.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <Wt/Dbo/Dbo.h>
#include <string>
 
namespace dbo = Wt::Dbo;
 
enum class Role {
    Visitor = 0,
    Admin = 1,
    Alien = 42
};
 
class User {
public:
    std::string name;
    std::string password;
    Role        role;
    int         karma;
 
    template<class Action>
    void persist(Action& a)
    {
        dbo::field(a, name,     "name");
        dbo::field(a, password, "password");
        dbo::field(a, role,     "role");
        dbo::field(a, karma,    "karma");
    }
};
 
 
void run()
{
    /*
     * Setup a session, would typically be done once at application startup.
     */
    auto sqlite3 = std::make_unique<Wt::Dbo::backend::Sqlite3>("blog.db");
    //auto sqlite3 = dbo::make_ptr<Wt::Dbo::backend::Sqlite3>("blog.db");
    dbo::Session session;
    session.setConnection(std::move(sqlite3));
 
    session.mapClass<User>("user");
 
    /*
     * Try to create the schema (will fail if already exists).
     */
    session.createTables();
 
    /*
     * A unit of work happens always within a transaction.
     */
    dbo::Transaction transaction(session);
 
    auto user = std::make_unique<User>();
    user->name = "Joe";
    user->password = "Secret";
    user->role = Role::Visitor;
    user->karma = 13;
 
    dbo::ptr<User> userPtr = session.add(std::move(user));
}
Bash
1
g++ -std=c++14 dbo.cpp -o wt -I/home/user/boost_1_81_0/include -L/home/user/boost_1_81_0/lib -lwt -lwtdbo -lwtdbosqlite3
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
dbo.cpp: In function ‘void run()’:
dbo.cpp:35:46: error: ‘backend’ is not a member of ‘Wt::Dbo’
   35 |     auto sqlite3 = std::make_unique<Wt::Dbo::backend::Sqlite3>("blog.db");
      |                                              ^~~~~~~
dbo.cpp:35:46: error: ‘backend’ is not a member of ‘Wt::Dbo’
dbo.cpp:35:25: error: parse error in template argument list
   35 |     auto sqlite3 = std::make_unique<Wt::Dbo::backend::Sqlite3>("blog.db");
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dbo.cpp:35:63: error: no matching function for call to ‘make_unique<<expression error> >(const char [8])’
   35 |     auto sqlite3 = std::make_unique<Wt::Dbo::backend::Sqlite3>("blog.db");
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
In file included from /usr/include/c++/12/memory:75,
                 from /home/user/boost_1_81_0/include/Wt/Dbo/ptr.h:14,
                 from /home/user/boost_1_81_0/include/Wt/Dbo/Types.h:10,
                 from /home/user/boost_1_81_0/include/Wt/Dbo/Dbo.h:10,
                 from dbo.cpp:1:
/usr/include/c++/12/bits/unique_ptr.h:1064:5: note: candidate: ‘template<class _Tp, class ... _Args> std::__detail::__unique_ptr_t<_Tp> std::make_unique(_Args&& ...)’
 1064 |     make_unique(_Args&&... __args)
      |     ^~~~~~~~~~~
/usr/include/c++/12/bits/unique_ptr.h:1064:5: note:   template argument deduction/substitution failed:
dbo.cpp:35:63: error: template argument 1 is invalid
   35 |     auto sqlite3 = std::make_unique<Wt::Dbo::backend::Sqlite3>("blog.db");
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
/usr/include/c++/12/bits/unique_ptr.h:1079:5: note: candidate: ‘template<class _Tp> std::__detail::__unique_ptr_array_t<_Tp> std::make_unique(size_t)’
 1079 |     make_unique(size_t __num)
      |     ^~~~~~~~~~~
/usr/include/c++/12/bits/unique_ptr.h:1079:5: note:   template argument deduction/substitution failed:
dbo.cpp:35:63: error: template argument 1 is invalid
   35 |     auto sqlite3 = std::make_unique<Wt::Dbo::backend::Sqlite3>("blog.db");
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
/usr/include/c++/12/bits/unique_ptr.h:1089:5: note: candidate: ‘template<class _Tp, class ... _Args> std::__detail::__invalid_make_unique_t<_Tp> std::make_unique(_Args&& ...)(deleted)
 1089 |     make_unique(_Args&&...) = delete;
      |     ^~~~~~~~~~~
/usr/include/c++/12/bits/unique_ptr.h:1089:5: note:   template argument deduction/substitution failed:
dbo.cpp:35:63: error: template argument 1 is invalid
   35 |     auto sqlite3 = std::make_unique<Wt::Dbo::backend::Sqlite3>("blog.db");
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
Путь к Sqlite3 верный - /home/user/boost_1_81_0/include/Wt/Dbo/backend
Не пойму с чем это связано, может из-за названия ::backend:: с маленькой буквы
Название класса соответствует

/*! \class Sqlite3 Wt/Dbo/backend/Sqlite3.h Wt/Dbo/backend/Sqlite3.h
* \brief An SQLite3 connection
*
* This class provides the backend implementation for SQLite3 databases.
*
* \ingroup dbo
*/

Если компилировать как-нибудь так -I/home/user/boost_1_81_0/include/Wt

Bash
1
g++ -std=c++14 dbo.cpp -o wt -I/home/user/boost_1_81_0/include/Wt -L/home/user/boost_1_81_0/lib -lwt -lwtdbo -lwtdbosqlite3
то выдает вообще такую ошибку:

Bash
1
2
3
4
dbo.cpp:1:10: fatal error: Wt/Dbo/Dbo.h: No such file or directory
    1 | #include <Wt/Dbo/Dbo.h>
      |          ^~~~~~~~~~~~~~
compilation terminated.
Помогите плиз разобраться.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2023, 19:28
Ответы с готовыми решениями:

Ошибка при компиляции (.is not a member of std)
При компиляции возникают следующие ошибки: wcerr/wostringstream is not a member of std В чем...

Image - при компиляции картинки не видно
загрузил картинку.jpg в компонент image при компиляции картинки не видно

Не видно определений функций при раздельной компиляции
Описал класс и его наследника в заголовочном файле; самые громоздкие определения функций вынес в...

Ошибка при компиляции: "Button2Click is not a member of TForm2"
Проблема с формой, не знаю как её устранить

4
фрилансер
5497 / 5093 / 1047
Регистрация: 11.10.2019
Сообщений: 13,333
28.07.2023, 20:33 2
догадки

тут Wt - лишнее в конце
Цитата Сообщение от Shooter85 Посмотреть сообщение
Если компилировать как-нибудь так -I/home/user/boost_1_81_0/include/Wt
а тут надо кавычки, а не треугольники
Цитата Сообщение от Shooter85 Посмотреть сообщение
#include <Wt/Dbo/Dbo.h>
0
18833 / 9835 / 2404
Регистрация: 30.01.2014
Сообщений: 17,273
28.07.2023, 21:08 3
Лучший ответ Сообщение было отмечено Shooter85 как решение

Решение

Цитата Сообщение от Shooter85 Посмотреть сообщение
Название класса соответствует
/*! \class Sqlite3 Wt/Dbo/backend/Sqlite3.h Wt/Dbo/backend/Sqlite3.h
Ну так сделайте:
C++
1
#include <Wt/Dbo/backend/Sqlite3.h>
Добавлено через 3 минуты
Цитата Сообщение от Shooter85 Посмотреть сообщение
/home/user/boost_1_81_0/include/Wt
К проблеме, думаю, не относится, но нафига вы Wt в include от буста запихали? Чтобы можно было вопрос в разделе boost опубликовать?
0
0 / 0 / 0
Регистрация: 18.07.2023
Сообщений: 27
28.07.2023, 22:45  [ТС] 4
Спасибо за советы.

Цитата Сообщение от Алексей1153 Посмотреть сообщение
а тут надо кавычки, а не треугольники
Я уже по всякому пробовал. По правилам, конечно, надо ковычки, но эта библиотека везде <> указывает в своих примерах и они работают. Проблема, к сожалению, не в этом.


Цитата Сообщение от DrOffset Посмотреть сообщение
Ну так сделайте:
C++
1
#include <Wt/Dbo/backend/Sqlite3.h>
К проблеме, думаю, не относится, но нафига вы Wt в include от буста запихали? Чтобы можно было вопрос в разделе boost опубликовать?
Вот так добавил и сработало.
#include "Wt/Dbo/Dbo.h"
#include "Wt/Dbo/backend/Sqlite3.h"
#include <string>
Хотя я ранее Wt/Dbo/backend/Sqlite3.h добавлял, но видимо вместо Dbo.h или как-то ещё криво сделал тогда...увы.

В основе Wt лежит Boost и его необходимо установить перед установкой Wt. У меня стоял Boost 1_81_0, но я решил поставить последнюю версию boost_1_82_0 для Wt. А boost_1_81_0, я тупо удалил. И по запаре установил Wt в старую папку от Boost
0
18833 / 9835 / 2404
Регистрация: 30.01.2014
Сообщений: 17,273
28.07.2023, 22:54 5
Цитата Сообщение от Shooter85 Посмотреть сообщение
В основе Wt лежит Boost и его необходимо установить перед установкой Wt.
Но это не значит, что его нужно ставить в тот же каталог.
Некоторый беспорядок так получается.
Хотя бы потому, что сложно будет отдельно буст обновить.
Кстати рекомендую ознакомиться с пакетными системами: vcpkg и NuGet для MSVC и MSYS2/pacman для MinGW, чтобы и буст и все остальное ставить в одну-две команды и сразу по правильным каталогам и совместимо с компилятором
0
28.07.2023, 22:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2023, 22:54
Помогаю со студенческими работами здесь

Ошибка [Warning] non-static data member initializers only available with -std=c++11 or -std=gnu++11 при компиляции
Доброго времени суток. Компилятор выдает ошибку non-static data member initializers only...

Ошибка компиляции. error: request for member
Добрый вечер. Возникает ошибка: error: request for member 'read_from' in...

При установке Виндос 7 или ХР не видно диска,но их видно в Акронисе и Биосе
При установке Виндос 7 или ХР не видно диска,но их видно в Акронисе и Биосе,в Акронисе можна их...

Lightbox. При открытии увеличенной картинки, видно только заднюю область черную, а само изображение не видно
Здравствуйте! на сайте странно работает lightbox. При открытии увеличенной картинки, видно только...

Класс Массив, ошибки компиляции при вызове методов
#include &lt;iostream&gt; using namespace std; class Mas{ private: int n; int *mas; public: ...

Класс для подсчета площади геометрических фигур ошибка при компиляции
Здравствуйте. При компиляции выводит ошибку: &quot;CL.exe&quot; завершилась с кодом 2. Конкретно номер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru