我正在使用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
的限制吗?
答案 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;
}