Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
QVO
 Аватар для QVO
636 / 447 / 32
Регистрация: 26.10.2010
Сообщений: 1,261
Записей в блоге: 4
Завершенные тесты: 2
23.08.2014, 11:10     Ошибка: undefined reference to при наследовании класса #1
Здравствуйте форумчане.
Пытаюсь наследовать класс 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...OAuthService.C
OAuthService.H https://github.com/kdeforche/wt/blob...h/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;
  }
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2014, 11:10     Ошибка: undefined reference to при наследовании класса
Посмотрите здесь:

Ошибка при компиляции undefined reference to `List<int>::List()'| C++
C++ Ошибка при запуске программы (undefined reference to...)
undefined reference to -ошибка C++
C++ Ошибка undefined reference to
Ошибка undefined reference C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
23.08.2014, 11:51     Ошибка: undefined reference to при наследовании класса #2
В какой строке хоть ошибка?
QVO
 Аватар для QVO
636 / 447 / 32
Регистрация: 26.10.2010
Сообщений: 1,261
Записей в блоге: 4
Завершенные тесты: 2
23.08.2014, 12:03  [ТС]     Ошибка: undefined reference to при наследовании класса #3
John Prick, во всех. 206 ошибок.
Миниатюры
Ошибка: undefined reference to при наследовании класса  
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.08.2014, 12:20     Ошибка: undefined reference to при наследовании класса #4
Цитата Сообщение от QVO Посмотреть сообщение
Ошибка: undefined reference to
Это значит, что компилятор функцию знает, а линкер нет.
QVO
 Аватар для QVO
636 / 447 / 32
Регистрация: 26.10.2010
Сообщений: 1,261
Записей в блоге: 4
Завершенные тесты: 2
23.08.2014, 12:34  [ТС]     Ошибка: undefined reference to при наследовании класса #5
taras atavin, не подскажите как это лечить?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
23.08.2014, 12:38     Ошибка: undefined reference to при наследовании класса #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Подключить либу. А вот какую именно зависит от функции.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2014, 13:45     Ошибка: undefined reference to при наследовании класса
Еще ссылки по теме:

C++ Ошибка при наследовании класса
Undefined reference или передача string в конструктор класса C++
C++ Ошибка undefined reference to

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

Или воспользуйтесь поиском по форуму:
QVO
 Аватар для QVO
636 / 447 / 32
Регистрация: 26.10.2010
Сообщений: 1,261
Записей в блоге: 4
Завершенные тесты: 2
23.08.2014, 13:45  [ТС]     Ошибка: undefined reference to при наследовании класса #7
taras atavin, большое спасибо за помощь. Забыл в pro файл библиотеки вписать!
Yandex
Объявления
23.08.2014, 13:45     Ошибка: undefined reference to при наследовании класса
Ответ Создать тему
Опции темы

Текущее время: 14:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru