Тип перечисления в качестве возвращаемого значения в soapcpp2 - PullRequest
1 голос
/ 29 февраля 2012

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

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

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

**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 * * 1015

1 Ответ

3 голосов
/ 04 марта 2012

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

По договоренности все параметры являются входными параметрами, кроме последнего. Последний параметр всегда является выходным параметром. Структура или класс используются для переноса нескольких выходных параметров, см. Также раздел 7.1.9. Этот последний параметр должен быть указателем или ссылкой. Напротив, входные параметры поддерживают передачу по значению или по указателю, но не по ссылке C ++.

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

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

Обратите внимание, что в этом примере явно используются типы XML-схемы (xsd__), рекомендуется использовать эту практику для улучшения взаимодействия . Соответствующая часть в файле 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;
}
...