определить не распознается при создании файлов gSOAP из заголовка - PullRequest
1 голос
/ 10 апреля 2019

Я пытаюсь сгенерировать классы 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 строка: 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];

все будет работать нормально.

Я бы действительно предпочел использовать макросы для размера строки (реальный случай более сложный). Может ли кто-нибудь помочь в этом?

1 Ответ

0 голосов
/ 10 апреля 2019

Поскольку этот вопрос помечен как C ++, а вы используете мыло cpp 2: вам, вероятно, не следует использовать определения, typedef struct ... и char-массивы для строк. Это сказало, и если нет особой причины ограничивать длину строки, переписайте ваш код так:

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

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

Результат успешной компиляции без каких-либо предупреждений.

...