枚举类型为soapcpp2中的返回值

时间:2012-02-29 15:23:45

标签: c++ enums gsoap

我正在使用gSoap创建一个Web服务,在头文件中我有几个方法定义,它们的返回类型是枚举值。 当我执行soapcpp2.exe工具并传递头文件时,我收到此错误:

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

另外,如果我有多个enum作为返回值的方法,我会收到此警告:

  

**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的限制吗?

1 个答案:

答案 0 :(得分:3)

您正在编写的头文件必须遵循一些gSoap约定。因此,函数的输出必须是最后一个参数。来自documentation

  

按照惯例,所有参数都是输入参数,除了最后一个。最后一个参数始终是输出参数。结构或类用于包装多个输出参数,另请参见第7.1.9节。最后一个参数必须是指针或引用。相反,输入参数支持按值传递或通过指针传递,但不支持通过C ++引用。

头文件中的相关部分如下所示:

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

请注意,此示例显式使用XML-Schema(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;
}