Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4

Ошибка: undefined reference to при наследовании класса

23.08.2014, 11:10. Показов 3448. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте форумчане.
Пытаюсь наследовать класс MyService от OAuthService и получаю множество ошибок:
Code
1
Ошибка: undefined reference to
За основу брал MyService = FacebookService
FacebookService.C https://github.com/kdeforche/w... kService.C
FacebookService.H https://github.com/kdeforche/w... ookService
OAuthService.C https://github.com/kdeforche/w... hService.C
OAuthService.H https://github.com/kdeforche/w... uthService

Помогите пожалуйста решить проблему.
Код с проекта.

myservice.h

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
#ifndef MYSERVICE_H
#define MYSERVICE_H
 
#include <Wt/Auth/OAuthService>
 
using namespace Wt;
using namespace Auth;
 
class MyService : public OAuthService
{
    public:
        MyService(const AuthService& baseAuthService);
 
        static bool configured();
        virtual std::string name() const;
        virtual WString description() const;
        virtual int popupWidth() const;
        virtual int popupHeight() const;
        virtual std::string authenticationScope() const;
        virtual std::string redirectEndpoint() const;
        virtual std::string redirectEndpointPath() const;
        virtual std::string authorizationEndpoint() const;
        virtual std::string tokenEndpoint() const;
        virtual std::string clientId() const;
        virtual std::string clientSecret() const;
        virtual Http::Method tokenRequestMethod() const;
        virtual OAuthProcess *createProcess(const std::string& scope) const;
};
 
#endif // MYSERVICE_H
myservice.cpp

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include "Wt/WApplication"
#include "Wt/Json/Object"
#include "Wt/Json/Parser"
#include "Wt/Http/Client"
 
#include "myservice.h"
 
using namespace Wt;
using namespace Auth;
 
#define ERROR_MSG(e) WString::tr("Wt.Auth.FacebookService." e)
 
namespace
{
    const char *RedirectEndpointProperty = "facebook-oauth2-redirect-endpoint";
    const char *RedirectEndpointPathProperty = "facebook-oauth2-redirect-endpoint-path";
    const char *ClientIdProperty = "facebook-oauth2-app-id";
    const char *ClientSecretProperty = "facebook-oauth2-app-secret";
    const char *AuthUrl = "https://www.facebook.com/dialog/oauth";
    const char *TokenUrl = "https://graph.facebook.com/oauth/access_token";
    const char *EmailScope = "email";
}
 
class MyProcess : public OAuthProcess
{
    public:
    MyProcess(const MyService& auth, const std::string& scope) : OAuthProcess(auth, scope)
    {
 
    }
    virtual void getIdentity(const OAuthAccessToken& token)
    {
        Http::Client *client = new Http::Client(this);
        client->setTimeout(15);
        client->setMaximumResponseSize(10*1024);
        client->done().connect(boost::bind(&MyProcess::handleMe, this, _1, _2));
        client->get("https://graph.facebook.com/me?access_token=" + token.value());
 
        #ifndef WT_TARGET_JAVA
            WApplication::instance()->deferRendering();
        #endif
    }
    private:
        void handleMe(boost::system::error_code err, const Http::Message& response)
        {
            #ifndef WT_TARGET_JAVA
                WApplication::instance()->resumeRendering();
            #endif
                if (!err && response.status() == 200)
                {
                    #ifndef WT_TARGET_JAVA
                        Json::ParseError e;
                        Json::Object me;
                        bool ok = Json::parse(response.body(), me, e);
                    #else
                        Json::Object me;
                        try
                        {
                            me = (Json::Object)Json::Parser().parse(response.body());
                        } catch (Json::ParseError pe) {}
                        bool ok = me.isNull();
                    #endif
 
                    if (!ok)
                    {
                        setError(ERROR_MSG("badjson"));
                        authenticated().emit(Identity::Invalid);
                    } else
                    {
                        std::string id = me.get("id");
                        WT_USTRING userName = me.get("name");
                        std::string email = me.get("email");
                        bool emailVerified = me.get("verified").orIfNull(false);
                        authenticated().emit(Identity(service().name(), id, userName, email, emailVerified));
                    }
                }
                else
                {
                    setError(ERROR_MSG("badresponse"));
                    authenticated().emit(Identity::Invalid);
                }
        }
};
MyService::MyService(const AuthService& baseAuth) : OAuthService(baseAuth)
{
 
}
bool MyService::configured()
{
    try
    {
        configurationProperty(RedirectEndpointProperty);
        configurationProperty(ClientIdProperty);
        configurationProperty(ClientSecretProperty);
        return true;
    } catch (const std::exception& e)
    {
        return false;
    }
}
std::string MyService::name() const
{
    return "facebook";
}
WString MyService::description() const
{
    return "Facebook Account";
}
std::string MyService::authenticationScope() const
{
    return EmailScope;
}
int MyService::popupWidth() const
{
    return 1000;
}
int MyService::popupHeight() const
{
    return 600;
}
std::string MyService::redirectEndpoint() const
{
    return configurationProperty(RedirectEndpointProperty);
}
std::string MyService::redirectEndpointPath() const
{
    try
    {
        return configurationProperty(RedirectEndpointPathProperty);
    } catch (const std::exception& e)
    {
        return OAuthService::redirectEndpointPath();
    }
}
std::string MyService::authorizationEndpoint() const
{
    return AuthUrl;
}
std::string MyService::tokenEndpoint() const
{
    return TokenUrl;
}
std::string MyService::clientId() const
{
    return configurationProperty(ClientIdProperty);
}
std::string MyService::clientSecret() const
{
    return configurationProperty(ClientSecretProperty);
}
Http::Method MyService::tokenRequestMethod() const
{
    return Http::Get;
}
OAuthProcess *MyService::createProcess(const std::string& scope) const
{
    return new MyProcess(*this, scope);
}
main.cpp

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <Wt/WApplication>
#include <Wt/WContainerWidget>
#include <Wt/WImage>
#include <Wt/WServer>
#include <Wt/WText>
#include <Wt/WBreak>
 
#include <Wt/Auth/AuthService>
#include "myservice.h"
 
using namespace Wt;
using namespace Auth;
 
AuthService authService;
MyService *myService = 0;
 
class OAuthApplication : public WApplication
{
public:
  OAuthApplication(const WEnvironment& env): WApplication(env)
  {
    if ( !myService )
    {
      new WText("This example requires a Google Auth service configuration", root());
      return;
    }
 
    process_ = myService->createProcess( myService->authenticationScope() );
    WImage *ggi = new WImage("css/oauth-google.png", root());
    ggi->clicked().connect(process_,&OAuthProcess::startAuthenticate);
 
    process_->authenticated().connect(this, &OAuthApplication::authenticated);
  }
 
  void authenticated(const Identity& identity)
  {
    root()->clear();
    new WText("Name: " + identity.name(), root());
    new WBreak( root());
    new WText("Email: " + identity.email() , root());
  }
 
private:
  OAuthProcess* process_;
};
 
WApplication *createApplication(const WEnvironment& env)
{
  return new OAuthApplication(env);
}
 
int main(int argc, char **argv)
{
 
  try {
    WServer server(argv[0]);
 
    server.setServerConfiguration(argc, argv, WTHTTP_CONFIGURATION);
    server.addEntryPoint(Application, createApplication);
 
    if (MyService::configured()) {
      myService = new MyService(authService);
    }
 
    if (server.start()) {
      WServer::waitForShutdown();
      server.stop();
    }
  } catch (WServer::Exception& e) {
    std::cerr << e.what() << std::endl;
  } catch (std::exception &e) {
    std::cerr << "exception: " << e.what() << std::endl;
  }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.08.2014, 11:10
Ответы с готовыми решениями:

Шаблон класса. Ошибка `undefined reference`
Доброго вечера. В следующем коде описывается незамысловатый шаблон. При разгрузке кода (т.е в 3 файла : main.cpp , chab.cpp , chab.h) ,...

Undefined reference при работе с статическим полем класса
Здравствуйте. Вот пример: class A { public: A(); A(const A&amp;); ~A();

Ошибка при запуске программы (undefined reference to...)
Здравствуйте, пишу лабу по С++ и столкнулся с ошибкой при запуске данного кода, ошибка 248|undefined reference to `Podrazdelenie::scan()' ...

6
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,557
23.08.2014, 11:51
В какой строке хоть ошибка?
1
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
23.08.2014, 12:03  [ТС]
John Prick, во всех. 206 ошибок.
Миниатюры
Ошибка: undefined reference to при наследовании класса  
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
23.08.2014, 12:20
Цитата Сообщение от QVO Посмотреть сообщение
Ошибка: undefined reference to
Это значит, что компилятор функцию знает, а линкер нет.
1
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
23.08.2014, 12:34  [ТС]
taras atavin, не подскажите как это лечить?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
23.08.2014, 12:38
Лучший ответ Сообщение было отмечено QVO как решение

Решение

Подключить либу. А вот какую именно зависит от функции.
1
 Аватар для QVO
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
23.08.2014, 13:45  [ТС]
taras atavin, большое спасибо за помощь. Забыл в pro файл библиотеки вписать!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.08.2014, 13:45
Помогаю со студенческими работами здесь

Странная ошибка: [Linker error] undefined reference to `__dyn_tls_init_callback' [Linker error] undefined reference to ld returned 1 exit status
Здравствуйте. Вот недавно начал изучать книгу &quot;С++ для чайников&quot; Стефан Р. Девис 4-е издание. И напоролся на кучу ошибок) Но смог все...

Ошибка при сборке небольшого проекта. undefined reference to
Здравствуйте. Задача программы - подсчет сколько раз в строке встречается каждый символ. Что-то вроде map, только список объектов класса....

PostgreSQL и CLion, ошибка при компиляции undefined reference
Господа знатоки, который день мучаюсь с одной проблемой Изучаю PostgreSQL. Возникла потребность в управлении базой через C++. Узнал, что...

Ошибка при работе с Orfeo ToolBox: undefined reference to `TIFFReadRGBAStrip@
undefined reference to `TIFFReadRGBAStrip@LIBTIFF_4.0'.............libossim.so.1 на всех форумах советуют установить библиотеки...

Ошибка при наследовании класса
Всем доброго времени суток, пытаюсь отнаследовать класс, вот такой код я смастерил: #ifndef CLASS_H_ #define CLASS_H_ class stack ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru