Конфликты объявлений C ++ - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть эта ошибка с четверга на прошлой неделе, и я не могу провести остаток своей жизни, пытаясь выяснить, что не так.Все, что я сделал, я объявил некоторые типы в заголовочном файле C ++ и использовал эти типы в другом заголовочном файле.Я продолжаю получать эти ошибки, и я перепробовал все, что придумал.Справка !!

Первый файл заголовка - Builder.hpp:

#ifndef BUILDER_HPP
    #define BUILDER_HPP

    enum BuildOpcUaType_enum
    {
        BU_UA_SIEMENS,
        BU_UA_LEGACY
    };

    enum BuildVariableTypes_enum
    {
        BU_NONE,
        BU_BOOL,
        BU_INT,
        BU_DINT,
        BU_REAL,
        BU_DATETIME,
        BU_STRUCT,
        BU_BUFFER_ID,
        BU_BUFFER_ACK,
        BU_WATCHDOG_IN,
        BU_WATCHDOG_OUT,
        BU_HEARTBEAT_IN,
        BU_HEARTBEAT_OUT
    };

    struct BuildOpcUaLists_type
    {

        char readList[UA_MAX_VARIABLES][UA_MAX_STRING];
        char readListDest[UA_MAX_VARIABLES][UA_MAX_STRING];
        BuildVariableTypes_enum readListType[UA_MAX_VARIABLES];
        unsigned short int readListArrSize[UA_MAX_VARIABLES];
        char readListStruct[UA_MAX_STRUCTURES][UA_MAX_STRUCT_VARIABLES][UA_MAX_STRUCT_VAR_STRING];
        BuildVariableTypes_enum readListStructTypes[UA_MAX_STRUCTURES][UA_MAX_STRUCT_VARIABLES];
        bool readIsBuffered[UA_MAX_VARIABLES];
        unsigned int readBufferIndex[UA_MAX_VARIABLES];

        char writeList[UA_MAX_VARIABLES][UA_MAX_STRING];
        char writeListSrc[UA_MAX_VARIABLES][UA_MAX_STRING];
        BuildVariableTypes_enum writeListType[UA_MAX_VARIABLES];
        unsigned short int writeListArrSize[UA_MAX_VARIABLES];
        char writeListStruct[UA_MAX_STRUCTURES][UA_MAX_STRUCT_VARIABLES][UA_MAX_STRUCT_VAR_STRING];
        BuildVariableTypes_enum writeListStructTypes[UA_MAX_STRUCTURES][UA_MAX_STRUCT_VARIABLES];

        BuildOpcUaLists_type();
        ~BuildOpcUaLists_type();
    };

    class Builder
    {
        public:
            Builder();
            ~Builder();

            Machine *BuildOpcUaMachine(char serverUrl[UA_MAX_STRING], BuildOpcUaLists_type *lists, BuildOpcUaType_enum uaType);
            DataExchanger *BuildDataExchanger(unsigned short int machineIndex, unsigned short int machineTypeIndex);

        private:
            void CreateOpcUaList(   char nodeList[][UA_MAX_STRING],
                                    char varList[][UA_MAX_STRING],
                                    unsigned int *nodeListSize,
                                    bool isNodeBuffered[],
                                    unsigned int nodeBufferIndex[],
                                    ComBuffData nodeBufferDataList[],
                                    char stringList[][UA_MAX_STRING],
                                    BuildVariableTypes_enum type[],
                                    unsigned short int listArrSize[],
                                    char listStruct[][UA_MAX_STRUCT_VARIABLES][UA_MAX_STRUCT_VAR_STRING],
                                    BuildVariableTypes_enum listStructType[][UA_MAX_STRUCT_VARIABLES],
                                    bool isBuffered[],
                                    unsigned int bufferIndex[],
                                    short int *ptrListInt[],
                                    short int **ptrInt,
                                    bool **ptrBool = 0);

            void CreateCharNumber(char num[3], unsigned short int index);

            unsigned short int nextMachineNbr;
            unsigned short int nextBoolArrNbr;
            unsigned short int nextIntArrNbr;
            unsigned short int nextDintArrNbr;
            unsigned short int nextRealArrNbr;
            unsigned short int nextBuffIdArrNbr;
            unsigned short int nextBuffAckArrNbr;
            unsigned short int nextWatchInArrNbr;
            unsigned short int nextWatchOutArrNbr;
            unsigned short int nextHeartInArrNbr;
            unsigned short int nextHeartOutArrNbr;
    };

#endif

Второй файл заголовка - Parser.hpp:

#ifndef PARSER_H
#define PARSER_H

#include "Builder.hpp"

Всякий раз, когда я компилирую, я получаюэти четыре ошибки:

  1. объявление функции C 'double atof (const char *)' конфликтует с
  2. предыдущее объявление 'float atof (long unsigned int)' здесь
  3. объявление функции C 'int atoi (const char *)' конфликтует с
  4. предыдущим объявлением 'long int atoi (long unsigned int)' здесь

Эти четыре ошибки относятся кстандартная библиотека stdlib.h и сгенерированный заголовочный файл с именем asstring.h Оба файла имеют объявление одинаковых функций (atoi и atof и даже ftoa и itoa).Теперь ошибки исчезают, если я не включаю «Builde.hpp» в «Parser.hpp», но это необходимо, потому что мне нужно использовать типы данных, определенные в «Builder.hpp».Я действительно застрял здесь с прошлой недели и на самом деле не знаю, что здесь происходит.

файл asstring.h:

/* Automation Studio generated header file */
/* Do not edit ! */

#ifndef _ASSTRING_
#define _ASSTRING_
#ifdef __cplusplus
extern "C" 
{
#endif

#include <bur/plctypes.h>

#ifndef _BUR_PUBLIC
#define _BUR_PUBLIC
#endif

/* Prototyping of functions and function blocks */
_BUR_PUBLIC unsigned short ftoa(float value, unsigned long pString);
_BUR_PUBLIC float atof(unsigned long pString);
_BUR_PUBLIC unsigned short itoa(signed long value, unsigned long pString);
_BUR_PUBLIC signed long atoi(unsigned long pString);


#ifdef __cplusplus
};
#endif
#endif /* _ASSTRING_ */

файл stdlib.h:

 /*
 * stdlib.h
 *
 * Definitions for common types, variables, and functions.
 */

#ifndef _STDLIB_H_
#define _STDLIB_H_

#include "_ansi.h"

#define __need_size_t
#define __need_wchar_t
#include <stddef.h>

#include <sys/reent.h>
#include <machine/stdlib.h>
#ifndef __STRICT_ANSI__
#include <alloca.h>
#endif

#ifdef __CYGWIN__
#include <cygwin/stdlib.h>
#endif

_BEGIN_STD_C

typedef struct 
{
  int quot; /* quotient */
  int rem; /* remainder */
} div_t;

typedef struct 
{
  long quot; /* quotient */
  long rem; /* remainder */
} ldiv_t;

#ifndef __STRICT_ANSI__
typedef struct
{
  long long int quot; /* quotient */
  long long int rem; /* remainder */
} lldiv_t;
#endif

#ifndef NULL
#define NULL 0
#endif

#define EXIT_FAILURE 1
#define EXIT_SUCCESS 0

#define RAND_MAX __RAND_MAX

extern __IMPORT int __mb_cur_max;

#define MB_CUR_MAX __mb_cur_max

_VOID   _EXFUN(abort,(_VOID) _ATTRIBUTE ((noreturn)));
int _EXFUN(abs,(int));
int _EXFUN(atexit,(_VOID (*__func)(_VOID)));
double  _EXFUN(atof,(const char *__nptr));
#ifndef __STRICT_ANSI__
float   _EXFUN(atoff,(const char *__nptr));
#endif
int _EXFUN(atoi,(const char *__nptr));
int _EXFUN(_atoi_r,(struct _reent *, const char *__nptr));
long    _EXFUN(atol,(const char *__nptr));
long    _EXFUN(_atol_r,(struct _reent *, const char *__nptr));
_PTR    _EXFUN(bsearch,(const _PTR __key,
               const _PTR __base,
               size_t __nmemb,
               size_t __size,
               int _EXPARM(_compar,(const _PTR, const _PTR))));
_PTR    _EXFUN(calloc,(size_t __nmemb, size_t __size));
div_t   _EXFUN(div,(int __numer, int __denom));
_VOID   _EXFUN(exit,(int __status) _ATTRIBUTE ((noreturn)));
_VOID   _EXFUN(free,(_PTR));
char *  _EXFUN(getenv,(const char *__string));
char *  _EXFUN(_getenv_r,(struct _reent *, const char *__string));
char *  _EXFUN(_findenv,(_CONST char *, int *));
char *  _EXFUN(_findenv_r,(struct _reent *, _CONST char *, int *));
long    _EXFUN(labs,(long));
ldiv_t  _EXFUN(ldiv,(long __numer, long __denom));
_PTR    _EXFUN(malloc,(size_t __size));
int _EXFUN(mblen,(const char *, size_t));
int _EXFUN(_mblen_r,(struct _reent *, const char *, size_t, _mbstate_t *));
int _EXFUN(mbtowc,(wchar_t *, const char *, size_t));
int _EXFUN(_mbtowc_r,(struct _reent *, wchar_t *, const char *, size_t, _mbstate_t *));
int _EXFUN(wctomb,(char *, wchar_t));
int _EXFUN(_wctomb_r,(struct _reent *, char *, wchar_t, _mbstate_t *));
size_t  _EXFUN(mbstowcs,(wchar_t *, const char *, size_t));
size_t  _EXFUN(_mbstowcs_r,(struct _reent *, wchar_t *, const char *, size_t, _mbstate_t *));
size_t  _EXFUN(wcstombs,(char *, const wchar_t *, size_t));
size_t  _EXFUN(_wcstombs_r,(struct _reent *, char *, const wchar_t *, size_t, _mbstate_t *));
#ifndef __STRICT_ANSI__
#ifndef _REENT_ONLY
int     _EXFUN(mkstemp,(char *));
char *  _EXFUN(mktemp,(char *));
#endif
#endif
_VOID   _EXFUN(qsort,(_PTR __base, size_t __nmemb, size_t __size, int(*_compar)(const _PTR, const _PTR)));
int _EXFUN(rand,(_VOID));
_PTR    _EXFUN(realloc,(_PTR __r, size_t __size));
_VOID   _EXFUN(srand,(unsigned __seed));
double  _EXFUN(strtod,(const char *__n, char **__end_PTR));
double  _EXFUN(_strtod_r,(struct _reent *,const char *__n, char **__end_PTR));
float   _EXFUN(strtof,(const char *__n, char **__end_PTR));
#ifndef __STRICT_ANSI__
/* the following strtodf interface is deprecated...use strtof instead */
# ifndef strtodf 
#  define strtodf strtof
# endif
#endif
long    _EXFUN(strtol,(const char *__n, char **__end_PTR, int __base));
long    _EXFUN(_strtol_r,(struct _reent *,const char *__n, char **__end_PTR, int __base));
unsigned long _EXFUN(strtoul,(const char *__n, char **__end_PTR, int __base));
unsigned long _EXFUN(_strtoul_r,(struct _reent *,const char *__n, char **__end_PTR, int __base));

int _EXFUN(system,(const char *__string));

#ifndef __STRICT_ANSI__
long    _EXFUN(a64l,(const char *__input));
char *  _EXFUN(l64a,(long __input));
char *  _EXFUN(_l64a_r,(struct _reent *,long __input));
int _EXFUN(on_exit,(_VOID (*__func)(int, _PTR),_PTR __arg));
_VOID   _EXFUN(_Exit,(int __status) _ATTRIBUTE ((noreturn)));
int _EXFUN(putenv,(char *__string));
int _EXFUN(_putenv_r,(struct _reent *, char *__string));
int _EXFUN(setenv,(const char *__string, const char *__value, int __overwrite));
int _EXFUN(_setenv_r,(struct _reent *, const char *__string, const char *__value, int __overwrite));

char *  _EXFUN(gcvt,(double,int,char *));
char *  _EXFUN(gcvtf,(float,int,char *));
char *  _EXFUN(fcvt,(double,int,int *,int *));
char *  _EXFUN(fcvtf,(float,int,int *,int *));
char *  _EXFUN(ecvt,(double,int,int *,int *));
char *  _EXFUN(ecvtbuf,(double, int, int*, int*, char *));
char *  _EXFUN(fcvtbuf,(double, int, int*, int*, char *));
char *  _EXFUN(ecvtf,(float,int,int *,int *));
char *  _EXFUN(dtoa,(double, int, int, int *, int*, char**));
int _EXFUN(rand_r,(unsigned *__seed));

double _EXFUN(drand48,(_VOID));
double _EXFUN(_drand48_r,(struct _reent *));
double _EXFUN(erand48,(unsigned short [3]));
double _EXFUN(_erand48_r,(struct _reent *, unsigned short [3]));
long   _EXFUN(jrand48,(unsigned short [3]));
long   _EXFUN(_jrand48_r,(struct _reent *, unsigned short [3]));
_VOID  _EXFUN(lcong48,(unsigned short [7]));
_VOID  _EXFUN(_lcong48_r,(struct _reent *, unsigned short [7]));
long   _EXFUN(lrand48,(_VOID));
long   _EXFUN(_lrand48_r,(struct _reent *));
long   _EXFUN(mrand48,(_VOID));
long   _EXFUN(_mrand48_r,(struct _reent *));
long   _EXFUN(nrand48,(unsigned short [3]));
long   _EXFUN(_nrand48_r,(struct _reent *, unsigned short [3]));
unsigned short *
       _EXFUN(seed48,(unsigned short [3]));
unsigned short *
       _EXFUN(_seed48_r,(struct _reent *, unsigned short [3]));
_VOID  _EXFUN(srand48,(long));
_VOID  _EXFUN(_srand48_r,(struct _reent *, long));
long long _EXFUN(atoll,(const char *__nptr));
long long _EXFUN(_atoll_r,(struct _reent *, const char *__nptr));
long long _EXFUN(llabs,(long long));
lldiv_t _EXFUN(lldiv,(long long __numer, long long __denom));
long long _EXFUN(strtoll,(const char *__n, char **__end_PTR, int __base));
long long _EXFUN(_strtoll_r,(struct _reent *, const char *__n, char **__end_PTR, int __base));
unsigned long long _EXFUN(strtoull,(const char *__n, char **__end_PTR, int __base));
unsigned long long _EXFUN(_strtoull_r,(struct _reent *, const char *__n, char **__end_PTR, int __base));

#ifndef __CYGWIN__
_VOID   _EXFUN(cfree,(_PTR));
void    _EXFUN(unsetenv,(const char *__string));
void    _EXFUN(_unsetenv_r,(struct _reent *, const char *__string));
#endif

#endif /* ! __STRICT_ANSI__ */

char *  _EXFUN(_dtoa_r,(struct _reent *, double, int, int, int *, int*, char**));
#ifndef __CYGWIN__
_PTR    _EXFUN(_malloc_r,(struct _reent *, size_t));
_PTR    _EXFUN(_calloc_r,(struct _reent *, size_t, size_t));
_VOID   _EXFUN(_free_r,(struct _reent *, _PTR));
_PTR    _EXFUN(_realloc_r,(struct _reent *, _PTR, size_t));
_VOID   _EXFUN(_mstats_r,(struct _reent *, char *));
#endif
int _EXFUN(_system_r,(struct _reent *, const char *));

_VOID   _EXFUN(__eprintf,(const char *, const char *, unsigned int, const char *));

_END_STD_C

#endif /* _STDLIB_H_ */

Заранее спасибо, Тахсина

...