Russian Qt Forum

Программирование => С/C++ => Тема начата: ZeBriD от Сентября 22, 2009, 18:00



Название: Создание объекта класса из API одного сервиса. Ошибки =(
Отправлено: ZeBriD от Сентября 22, 2009, 18:00
День или вечер добрый.
Скачал API одного сервиса. При попытке создать объект одного из API классов , получаю несколько ошибок :
Код:
tmp/mainwindow.o: In function `UserStoreClient':
/path_to_project/api/UserStore.h:593: undefined reference to `vtable for evernote::edam::UserStoreClient'
/path_to_project/api/UserStore.h:593: undefined reference to `vtable for evernote::edam::UserStoreClient'
tmp/mainwindow.o: In function `~UserStoreClient':
/path_to_project/api/UserStore.h:589: undefined reference to `vtable for evernote::edam::UserStoreClient'
/path_to_project/api/UserStore.h:589: undefined reference to `vtable for evernote::edam::UserStoreClient'
collect2: ld returned 1 exit status

Объявляю переменную следущим образом:
Код:
UserStoreClient userStore = UserStoreClient(userStoreProtocol);
где переменная userStoreProtocol соответственно заранее определена.
Посмотрел код класса - в нём нет виртуальных функций, которые надо было бы определить....

Собственно, сам класс UserStoreClient объявлен следущим образом:
Код:
class UserStoreIf {
 public:
  virtual ~UserStoreIf() {}
  virtual bool checkVersion(const std::string& clientName, const int16_t edamVersionMajor, const int16_t edamVersionMinor) = 0;
  virtual void authenticate(AuthenticationResult& _return, const std::string& username, const std::string& password, const std::string& consumerKey, const std::string& consumerSecret) = 0;
  virtual void refreshAuthentication(AuthenticationResult& _return, const std::string& authenticationToken) = 0;
  virtual void getUser(evernote::edam::User& _return, const std::string& authenticationToken) = 0;
  virtual void getPublicUserInfo(PublicUserInfo& _return, const std::string& username) = 0;
};


class UserStoreClient : virtual public UserStoreIf {
 public:
  UserStoreClient(boost::shared_ptr<apache::thrift::protocol::TProtocol> prot) :
    piprot_(prot),
    poprot_(prot) {
    iprot_ = prot.get();
    oprot_ = prot.get();
  }
  UserStoreClient(boost::shared_ptr<apache::thrift::protocol::TProtocol> iprot, boost::shared_ptr<apache::thrift::protocol::TProtocol> oprot) :
    piprot_(iprot),
    poprot_(oprot) {
    iprot_ = iprot.get();
    oprot_ = oprot.get();
  }
  boost::shared_ptr<apache::thrift::protocol::TProtocol> getInputProtocol() {
    return piprot_;
  }
  boost::shared_ptr<apache::thrift::protocol::TProtocol> getOutputProtocol() {
    return poprot_;
  }
  bool checkVersion(const std::string& clientName, const int16_t edamVersionMajor, const int16_t edamVersionMinor);
  void send_checkVersion(const std::string& clientName, const int16_t edamVersionMajor, const int16_t edamVersionMinor);
  bool recv_checkVersion();
  void authenticate(AuthenticationResult& _return, const std::string& username, const std::string& password, const std::string& consumerKey, const std::string& consumerSecret);
  void send_authenticate(const std::string& username, const std::string& password, const std::string& consumerKey, const std::string& consumerSecret);
  void recv_authenticate(AuthenticationResult& _return);
  void refreshAuthentication(AuthenticationResult& _return, const std::string& authenticationToken);
  void send_refreshAuthentication(const std::string& authenticationToken);
  void recv_refreshAuthentication(AuthenticationResult& _return);
  void getUser(evernote::edam::User& _return, const std::string& authenticationToken);
  void send_getUser(const std::string& authenticationToken);
  void recv_getUser(evernote::edam::User& _return);
  void getPublicUserInfo(PublicUserInfo& _return, const std::string& username);
  void send_getPublicUserInfo(const std::string& username);
  void recv_getPublicUserInfo(PublicUserInfo& _return);
 protected:
  boost::shared_ptr<apache::thrift::protocol::TProtocol> piprot_;
  boost::shared_ptr<apache::thrift::protocol::TProtocol> poprot_;
  apache::thrift::protocol::TProtocol* iprot_;
  apache::thrift::protocol::TProtocol* oprot_;
};

Подскажите, как таки избавиться от этих ошибок ???


Название: Re: Создание объекта класса из API одного сервиса. Ошибки =(
Отправлено: Tonal от Сентября 23, 2009, 08:20
Либки не подключены.


Название: Re: Создание объекта класса из API одного сервиса. Ошибки =(
Отправлено: ZeBriD от Сентября 23, 2009, 08:42
А не подскажите случаем, какие именно ?  ::)


Название: Re: Создание объекта класса из API одного сервиса. Ошибки =(
Отправлено: ZeBriD от Сентября 23, 2009, 10:11
Собственно, долго копаясь дошёл вот до чего:
Закоментил всё нафиг. Оставил только конструктор и определение вирт.методов предка с пустыми телами. Собралось без проблем.
Начал раскоменчивать. Ошибка появляется когда у какого-либо из определённых методов убрать пустое тело.
Соответственно, реализация имеется в соответствующем срр файле.