Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
QVO
641 / 452 / 32
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
Завершенные тесты: 2
#1

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

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

Здравствуйте форумчане.
Пытаюсь наследовать класс MyService от OAuthService и получаю множество ошибок:
Код
Ошибка: undefined reference to
За основу брал MyService = FacebookService
FacebookService.C https://github.com/kdeforche/wt/blob...ebookService.C
FacebookService.H https://github.com/kdeforche/wt/blob...acebookService
OAuthService.C https://github.com/kdeforche/wt/blob/master/src/Wt/Auth/OAuthService.C
OAuthService.H https://github.com/kdeforche/wt/blob/master/src/Wt/Auth/OAuthService

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

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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2014, 11:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка: undefined reference to при наследовании класса (C++):

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

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

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

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

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

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

6
John Prick
803 / 736 / 145
Регистрация: 27.07.2012
Сообщений: 2,108
Завершенные тесты: 3
23.08.2014, 11:51 #2
В какой строке хоть ошибка?
1
QVO
641 / 452 / 32
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
Завершенные тесты: 2
23.08.2014, 12:03  [ТС] #3
John Prick, во всех. 206 ошибок.
0
Миниатюры
Ошибка: undefined reference to при наследовании класса  
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.08.2014, 12:20 #4
Цитата Сообщение от QVO Посмотреть сообщение
Ошибка: undefined reference to
Это значит, что компилятор функцию знает, а линкер нет.
1
QVO
641 / 452 / 32
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
Завершенные тесты: 2
23.08.2014, 12:34  [ТС] #5
taras atavin, не подскажите как это лечить?
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.08.2014, 12:38 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Подключить либу. А вот какую именно зависит от функции.
1
QVO
641 / 452 / 32
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
Завершенные тесты: 2
23.08.2014, 13:45  [ТС] #7
taras atavin, большое спасибо за помощь. Забыл в pro файл библиотеки вписать!
0
23.08.2014, 13:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2014, 13:45
Привет! Вот еще темы с ответами:

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

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

Undefined reference или передача string в конструктор класса - C++
Собственно проблема на этапе компиляции в main.cpp на 19 строке. Не понимаю, почему он требует 4 аргумента, когда у меня в объявлении...

Шаблон класса complex. Ошибка undefined reference to `complex<double>::SetRe(double)' - C++
Есть такой файл complex.h #ifndef COMPLEX_H #define COMPLEX_H template&lt;class Type&gt; class complex{ public: Type Re; Type...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru