Пример gsoap calc ++ закончился с ошибкой - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь построить calc ++ после изучения учебника, приведенного здесь https://www.genivia.com/examples/calc++/index.html, но в итоге получаю ошибку, как показано ниже.

Вот шаги, за которыми я следовал

  1. wsdl2h -o calc.h http://www.genivia.com/calc.wsdl [Это создало файл заголовка, и я не уверен, что делатьfile "typemap.dat" file, поэтому я продолжаю второй шаг]

  2. soapcpp2 -j -r -CL calc.h [Это создает необходимые файлы, и я скачал calcclient.cpp,скопировал stdsoap2.h и stdsoap2.cpp в одну и ту же папку]

  3. g ++ -o calcclient calcclient.cpp stdsoap2.cpp soapC.cpp soapcalcProxy.cpp [Этот шаг заканчивается с ошибкойниже]

Может ли кто-нибудь помочь мне в этом, я совершенно новичок в gsoap и пытаюсь что-то с ним построить, поэтому я решил начать с примера gsoap, но получил эту большую ошибку.Я делаю это в Ubuntu и выполняю точные шаги, описанные в руководстве. Пожалуйста, проверьте ошибку ниже

calcclient.cpp: In function ‘int main(int, char**)’:
calcclient.cpp:58:29: error: no matching function for call to ‘calcProxy::add(double&, double&, double*)’
   calc.add(a, b, &result);
                         ^
In file included from calcclient.cpp:41:0:
soapcalcProxy.h:74:21: note: candidate: virtual int calcProxy::add(double, double, double&)
     virtual int add(double a, double b, double &result)
                 ^
soapcalcProxy.h:74:21: note:   no known conversion for argument 3 from ‘double*’ to ‘double&’
soapcalcProxy.h:76:21: note: candidate: virtual int calcProxy::add(const char*, const char*, double, double, double&)
     virtual int add(const char *soap_endpoint, const char *soap_action, double a, double b, double &result);
                 ^
soapcalcProxy.h:76:21: note:   candidate expects 5 arguments, 3 provided
calcclient.cpp:61:29: error: no matching function for call to ‘calcProxy::sub(double&, double&, double*)’
   calc.sub(a, b, &result);
                         ^
In file included from calcclient.cpp:41:0:
soapcalcProxy.h:78:21: note: candidate: virtual int calcProxy::sub(double, double, double&)
     virtual int sub(double a, double b, double &result)
                 ^
soapcalcProxy.h:78:21: note:   no known conversion for argument 3 from ‘double*’ to ‘double&’
soapcalcProxy.h:80:21: note: candidate: virtual int calcProxy::sub(const char*, const char*, double, double, double&)
     virtual int sub(const char *soap_endpoint, const char *soap_action, double a, double b, double &result);
                 ^
soapcalcProxy.h:80:21: note:   candidate expects 5 arguments, 3 provided
calcclient.cpp:64:29: error: no matching function for call to ‘calcProxy::mul(double&, double&, double*)’
   calc.mul(a, b, &result);
                         ^
In file included from calcclient.cpp:41:0:
soapcalcProxy.h:82:21: note: candidate: virtual int calcProxy::mul(double, double, double&)
     virtual int mul(double a, double b, double &result)
                 ^
soapcalcProxy.h:82:21: note:   no known conversion for argument 3 from ‘double*’ to ‘double&’
soapcalcProxy.h:84:21: note: candidate: virtual int calcProxy::mul(const char*, const char*, double, double, double&)
     virtual int mul(const char *soap_endpoint, const char *soap_action, double a, double b, double &result);
                 ^
soapcalcProxy.h:84:21: note:   candidate expects 5 arguments, 3 provided
calcclient.cpp:67:29: error: no matching function for call to ‘calcProxy::div(double&, double&, double*)’
   calc.div(a, b, &result);
                         ^
In file included from calcclient.cpp:41:0:
soapcalcProxy.h:86:21: note: candidate: virtual int calcProxy::div(double, double, double&)
     virtual int div(double a, double b, double &result)
                 ^
soapcalcProxy.h:86:21: note:   no known conversion for argument 3 from ‘double*’ to ‘double&’
soapcalcProxy.h:88:21: note: candidate: virtual int calcProxy::div(const char*, const char*, double, double, double&)
     virtual int div(const char *soap_endpoint, const char *soap_action, double a, double b, double &result);
                 ^
soapcalcProxy.h:88:21: note:   candidate expects 5 arguments, 3 provided
calcclient.cpp:70:29: error: no matching function for call to ‘calcProxy::pow(double&, double&, double*)’
   calc.pow(a, b, &result);
                         ^
In file included from calcclient.cpp:41:0:
soapcalcProxy.h:90:21: note: candidate: virtual int calcProxy::pow(double, double, double&)
     virtual int pow(double a, double b, double &result)
                 ^
soapcalcProxy.h:90:21: note:   no known conversion for argument 3 from ‘double*’ to ‘double&’
soapcalcProxy.h:92:21: note: candidate: virtual int calcProxy::pow(const char*, const char*, double, double, double&)
     virtual int pow(const char *soap_endpoint, const char *soap_action, double a, double b, double &result);
                 ^
soapcalcProxy.h:92:21: note:   candidate expects 5 arguments, 3 provided

1 Ответ

0 голосов
/ 05 июня 2018

Возможно, вы передаете один или несколько аргументов в качестве указателя.Правильный вызов прокси должен выглядеть следующим образом:

#include "soapcalcProxy.h"
#include "calc.nsmap"

  double a, b, result;
  calcProxy calc("http://server.com/path");
  a = 1.23;
  b = 4.56;
  int err = calc.add(a, b, result);
...