我正在做一个简单的soap应用程序。我有两个功能,一个在服务器上,另一个在客户端上。然而,我一直在客户身上遇到细分错误。我做错了什么?
这是客户端
#include "soapTempConvertSoapProxy.h"
#include "soapTempConvertSoapService.h"
#include "TempConvertSoap.nsmap"
#include <iostream>
using namespace std;
#include <string>
#include <sstream>
std::string s = std::string();
const char server[] = "http://localhost:8000";
int main(int argc, char **argv)
{
TempConvertSoapProxy temp;
//mudar endpoint se necessario
temp.soap_endpoint = server;
_ns1__FahrenheitToCelsius *ns1__FahrenheitToCelsius;
_ns1__FahrenheitToCelsiusResponse *ns1__FahrenheitToCelsiusResponse;
_ns1__CelsiusToFahrenheit *ns1__CelsiusToFahrenheit;
_ns1__CelsiusToFahrenheitResponse *ns1__CelsiusToFahrenheitResponse;
int ope = 1;
while(ope)
{
std::cout << "Por favor entre com o codigo da operacao:" << 'n';
std::cout << "1 = Fahrenheit para Celsius, 2 = Celsius para Fahrenheit, 0 = terminar" << 'n';
std::cin >> ope;
std::cout << "Por favor entre com a temperatura" << 'n';
if(ope == 1 || ope == 3)
{
std::cin >> s;
ns1__FahrenheitToCelsius->Fahrenheit = &s;
}
else
{
if(ope == 2 || ope == 4)
{
std::cin >> s;
ns1__CelsiusToFahrenheit->Celsius = &s;
}
}
switch(ope)
{
case 0: break;
case 1: if(temp.FahrenheitToCelsius(ns1__FahrenheitToCelsius, ns1__FahrenheitToCelsiusResponse) == SOAP_OK)
{
std::string z = *(ns1__FahrenheitToCelsiusResponse->FahrenheitToCelsiusResult);
std::cout << z << 'n';
}
else
{
temp.soap_stream_fault(std::cerr);
}
break;
case 2: if(temp.CelsiusToFahrenheit(ns1__CelsiusToFahrenheit, ns1__CelsiusToFahrenheitResponse) == SOAP_OK)
{
std::string z = ns1__FahrenheitToCelsiusResponse->FahrenheitToCelsiusResult->c_str();
std::cout << z << 'n';
}
else
{
temp.soap_stream_fault(std::cerr);
}
break;
case 3: if(temp.FahrenheitToCelsius_(ns1__FahrenheitToCelsius, ns1__FahrenheitToCelsiusResponse) == SOAP_OK)
{
std::string z = ns1__FahrenheitToCelsiusResponse->FahrenheitToCelsiusResult->c_str();
std::cout << z << 'n';
}
else
{
temp.soap_stream_fault(std::cerr);
}
break;
case 4: if(temp.CelsiusToFahrenheit_(ns1__CelsiusToFahrenheit, ns1__CelsiusToFahrenheitResponse) == SOAP_OK)
{
std::string z = ns1__FahrenheitToCelsiusResponse->FahrenheitToCelsiusResult->c_str();
std::cout << z << 'n';
}
else
{
temp.soap_stream_fault(std::cerr);
}
break;
default: std::cout << "Erro! Codigo de operação desconhecido!" << 'n' << "Por favor, tente novamente!" << 'n';
break;
}
}
return 0;
}
这是服务器
#include "soapTempConvertSoapService.h"
#include "TempConvertSoap.nsmap"
#include <iostream>
#include <stdlib.h>
using namespace std;
#include <string>
#include <sstream>
#include <utility>
std::string s = std::string();
std::string str = std::string();
int demp;
int main(int argc, char **argv)
{
TempConvertSoapService temp;
if (argc < 2)
{
temp.serve(); /* serve as CGI application */
}
else
{
int port = atoi(argv[1]);
if (!port)
{
fprintf(stderr, "Usage: tempserver++ <port>n");
exit(0);
}
/* run iterative server on port until fatal error */
if (temp.run(port))
{
temp.soap_stream_fault(std::cerr);
exit(-1);
}
}
return 0;
}
int TempConvertSoapService::FahrenheitToCelsius(_ns1__FahrenheitToCelsius *ns1__FahrenheitToCelsius, _ns1__FahrenheitToCelsiusResponse *ns1__FahrenheitToCelsiusResponse)
{
str = (*ns1__FahrenheitToCelsius->Fahrenheit);
istringstream convert(str);
stringstream konvert;
if ( !(convert >> demp) )
{
demp = 0;
}
else
{
demp = (demp - 32) * 5/9;
konvert << demp;
s = konvert.str();
ns1__FahrenheitToCelsiusResponse->FahrenheitToCelsiusResult = &s;
}
return SOAP_OK;
}
int TempConvertSoapService::CelsiusToFahrenheit(_ns1__CelsiusToFahrenheit *ns1__CelsiusToFahrenheit, _ns1__CelsiusToFahrenheitResponse *ns1__CelsiusToFahrenheitResponse)
{
str = (*ns1__CelsiusToFahrenheit->Celsius);
istringstream convert(str);
stringstream konvert;
demp;
if ( !(convert >> demp) )
{
demp = 0;
}
else
{
demp = demp * 9/5 + 32;
konvert << demp;
s = konvert.str();
ns1__CelsiusToFahrenheitResponse->CelsiusToFahrenheitResult = &s;
}
return SOAP_OK;
}
int TempConvertSoapService::FahrenheitToCelsius_(_ns1__FahrenheitToCelsius *ns1__FahrenheitToCelsius, _ns1__FahrenheitToCelsiusResponse *ns1__FahrenheitToCelsiusResponse)
{
str = (*ns1__FahrenheitToCelsius->Fahrenheit);
istringstream convert(str);
stringstream konvert;
demp;
if ( !(convert >> demp) )
{
demp = 0;
}
else
{
demp = (demp - 32) * 5/9;
konvert << demp;
s = konvert.str();
ns1__FahrenheitToCelsiusResponse->FahrenheitToCelsiusResult = &s;
}
return SOAP_OK;
}
int TempConvertSoapService::CelsiusToFahrenheit_(_ns1__CelsiusToFahrenheit *ns1__CelsiusToFahrenheit, _ns1__CelsiusToFahrenheitResponse *ns1__CelsiusToFahrenheitResponse)
{
str = (*ns1__CelsiusToFahrenheit->Celsius);
istringstream convert(str);
stringstream konvert;
demp;
if ( !(convert >> demp) )
{
demp = 0;
}
else
{
demp = demp * 9/5 + 32;
konvert << demp;
s = konvert.str();
ns1__CelsiusToFahrenheitResponse->CelsiusToFahrenheitResult = &s;
}
return SOAP_OK;
}
谢谢!
您从不初始化_ns1__FahrenheitToCelsius *ns1__FahrenheitToCelsius
和类似的变量,而是尝试访问它们的数据成员(例如ns1__FahrenheitToCelsius->Fahrenheit = &s;
)。看起来这些可能只是对象本身,而不是指针。