Использование сессий с fastcgi++
У меня проблемы с использованием сессий с fastcgi++ 2 beta.
Вот мой код:
#include <fastcgi++/http.hpp>
#include <fastcgi++/request.hpp>
#include <fastcgi++/manager.hpp>
#include <string>
using namespace std;
using namespace Fastcgipp::Http;
class SessionsPage : public Fastcgipp::Request<char> {
static Sessions<string> sessions;
Sessions<string>::iterator session;
bool response() {
sessions.cleanup();
out << "Content-Type: text/html;\r\n\r\n";
out << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">" << std::endl;
out << "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\" >" << std::endl;
out << " <head>" << std::endl;
out << " <title>Sessions</title>" << std::endl;
out << " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />" << std::endl;
out << " </head>" << std::endl;
out << " <body>" << std::endl;
out << " <p>Hello World!</p>" << std::endl;
out << " </body>" << std::endl;
out << "</html>" << std::endl;
return true;
}
};
int main() {
Fastcgipp::Manager<SessionsPage> fcgi;
fcgi.handler();
}
Я получил следующую ошибку:
/tmp/ccRujo45.o: In function `SessionsPage::response()':
sessions_page.cpp:(.text._ZN12SessionsPage8responseEv[SessionsPage::response()]+0xd): undefined reference to `SessionsPage::sessions'
collect2: ld a retourné 1 code d'état d'exécution
Если я прокомментирую эту строку, она скомпилирует:
sessions.cleanup();
Я использую этот учебник.
Спасибо за вашу помощь.
1 ответ
Решение
static Sessions<string> sessions;
объявлен только в классе; вам нужно создать определение для него. В этом случае я считаю, что прилипание Sessions<string> SessionsPage::sessions;
после того, как ваш класс в порядке, учитывая, что класс используется только в одной единице перевода. (Если вы используете его в нескольких единицах перевода, статическая переменная должна быть определена в одной и только одной единице перевода)