2012-02-29 3 views
1

gSoap을 사용하여 웹 서비스를 만들고 있는데 헤더 파일에 반환 유형이 enum 값이라는 몇 가지 메소드 정의가 있습니다. 나는 '반환 값으로 열거 더 이상의 방법이있는 경우, 또한soapcpp2의 반환 값 열거 유형

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

: 나는 soapcpp2.exe 도구를 실행하고 나는이 오류를 받고 있어요 헤더 파일을 통과하고있어 이 soapcpp.exe의 제한

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

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

인가 :

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

내 헤더 파일처럼 같은 모양 : m이 경고를 받고?

답변

3

작성한 헤더 파일은 gSoap 규약을 준수해야합니다. 따라서 함수의 출력은 마지막 인수 여야합니다. documentation에서 :이 예는 명시 적으로 XML-스키마 (xsd__) 타입을 사용하는

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

주, this practice is advised to improve interoperability :

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.

헤더 파일의 관련 부분과 같을 것이다. 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; 
}