从标头生成gSOAP文件时定义无法识别

问题描述 投票:1回答:1

我试图从头文件生成gsoap类

soapcpp2.exe test.h

test.h

// test.h

#define MY_STRUCT_NAME_LEN 50

typedef struct MY_STRUCT_TYPE
{
    char name[MY_STRUCT_NAME_LEN];
}MY_STRUCT;

int op1(MY_STRUCT* a, int b, int * r );

我的问题是#define MY_STRUCT_NAME_LEN 50 al line:3无法识别。

test.h(7): *WARNING*: undefined identifier 'MY_STRUCT_NAME_LEN'


test.h(7): *WARNING*: char[30681240620171331] will be serialized as an array of 30681240620171331 bytes: use soapcpp2 option -b to enable char[] string serialization or use char* for strings


    test.h(7): **ERROR**: undetermined array size

    Saving soapStub.h annotated copy of the source interface header file
    Saving soapH.h serialization functions to #include in projects

    test.h(12): *WARNING*: serializable typedef 'MY_STRUCT' is not namespace qualified: schema definition for 'MY_STRUCT' in WSDL file output may be invalid

    Saving soap.nsmap namespace mapping table
    Saving soapClient.cpp client call stub functions
    Saving soapClientLib.cpp client stubs with serializers (use only for libs)
    Saving soapServer.cpp server request dispatcher
    Saving soapServerLib.cpp server request dispatcher with serializers (use only for libs)
    Saving soapC.cpp serialization functions

    There were errors:
    1 semantic error
    3 warnings

如果我换行:7到

char name[50];

它会工作正常。

我真的更喜欢使用宏来表示字符串的大小(实际情况更复杂)。有人可以帮忙吗?

c++ gsoap
1个回答
0
投票

因为这个问题标记为C ++而你正在使用soapcpp2:你可能不应该使用define,typedef struct ...和char-arrays作为字符串。这说,如果没有特别的理由限制字符串长度,请将代码重写为:

class test {
    public:
    std::string name;
};

int op1(test* a, int b, int * r );

成功编译的结果没有任何警告。

© www.soinside.com 2019 - 2024. All rights reserved.