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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Поиск макроса, принимающего строку как параметр http://www.cyberforum.ru/cpp-beginners/thread1246085.html
Можно ли данный пример переделать, только чтоб в макрос входила строка, т.е. так: SHOW_DEFINE("WS_VISIBLE"); Пробовал сам удалять stringizing операторы, но что то не получилось. char buf=""; #define STR(x) #x #define SHOW_DEFINE(x) strcmp(STR(x),#x)!=0?strcpy(buf,#x):strcpy(buf,"NOT defined") int _tmain(int argc, _TCHAR* argv) { SHOW_DEFINE(WS_VISIBLE); cout << buf << endl;
C++ Сравнение двух объектов через конструктор с одним аргументом class Int { private: unsigned int integer; public: inline int get_int()const {return integer;} Int () : integer (0){} Int ( int c ) : integer(c){} }; http://www.cyberforum.ru/cpp-beginners/thread1246060.html
C++ Сравнение класса наследника через конструктор с одним аргументом
#include <iostream> using namespace std; //////////////////////////////// class Counter { protected: unsigned int count; public: Counter () : count (0){} Counter ( int c ) : count(c){}
Узнать позицию символа в строке string C++
Привет, как узнать индекс символа 'l' в строке string ? string s = "Hello";
C++ Что означают эти конструкции? http://www.cyberforum.ru/cpp-beginners/thread1246037.html
Вот начал изучать cpp , до этого изучал несколько языков, таких как pawn,php и т.д. Вопросы: 1) Что означают такие конструкции как (тип данных)переменная. Типо: int test = 1; cout << (DWORD)test << endl; 2) Что означают такие конструкции типо: переменная->класс() Ответьте новичку пожалуйста :)
C++ Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес наибольшей строки (Стивен Прата - "Язык программирования с++", 8 глава, часть 6 задания). Судя по выводу, функция возвращает не адрес, а саму строку. Почему не работает и как сделать правильно? #include<iostream> #include<cstring> template<typename T> ... подробнее

Показать сообщение отдельно
QVO
 Аватар для QVO
636 / 447 / 32
Регистрация: 26.10.2010
Сообщений: 1,261
Записей в блоге: 4
Завершенные тесты: 2
23.08.2014, 11:10     Ошибка: undefined reference to при наследовании класса
Здравствуйте форумчане.
Пытаюсь наследовать класс 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;
  }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru