2012-02-29 3 views
1

Я создаю веб-сервис с помощью gSoap, в файле заголовка у меня есть несколько определений методов, их тип возвращаемого значения - значение перечисления. Когда я выполнение инструмента soapcpp2.exe и переходя с заголовком файлом я получаю эту ошибку:Тип перечисления как возвращаемое значение в soapcpp2

sample.h(20): syntax error 
sample.h(21): Syntax error: input before ; skipped 

Кроме того, если у меня есть более чем один метод с перечислением в качестве возвращаемого значения I» м получаю это предупреждение:

**WARNING**: Duplicate declaration of 'sample_status_____' (already declared at li ne 31), changing conflicting identifier name to new name sample_status______'. Note: this problem may be caused by importing invalid XML schemas (detected at line 38 in sample.h)

Мой заголовочный файл выглядит как например:

// enum definition 
enum status {ok, error}; 

// method definition 
status ns_calc(int a, int b); 

Является ли это ограничение с soapcpp.exe?

ответ

3

Файл заголовка, который вы пишете, должен следовать некоторым соглашениям gSoap. Поэтому вывод функции должен быть последним аргументом. Из documentation:

By convention, all parameters are input parameters except the last. The last parameter is always the output parameter. A struct or class is used to wrap multiple output parameters, see also Section 7.1.9. This last parameter must be a pointer or reference. By contrast, the input parameters support pass by value or by pointer, but not pass by C++ reference.

Соответствующая часть в файле заголовка будет выглядеть следующим образом:

enum ns__status { ok, error }; 
int ns__calc(xsd__int a, xsd__int b, enum ns__status& out); 

Обратите внимание, что этот пример явно использует XML-схемы (xsd__) типов, this practice is advised to improve interoperability. Соответствующая часть в файле cpp будет выглядеть так:

int ns__calc(struct soap* soap, xsd__int a, xsd__int b, enum ns__status& out) 
{ 
    // do something with 'a' and 'b' and set 'out' 
    out = ... 
    return SOAP_OK; 
} 
Смежные вопросы