C конфликтующих типов для функции с разными аргументами - PullRequest
2 голосов
/ 05 февраля 2012

У меня есть структура с 2 функциями инициализатора, которые принимают разные типы аргументов:

struct myStruct;
typedef struct myStruct *myStruct;

INFNumber *myStructMake(long long arg);
INFNumber *myStructMake(char *arg);

Я получаю ошибку conflicting types for 'myStructMake' во втором объявлении. Разве C не способен иметь 2 функции с одинаковыми именами, которые принимают разные параметры? Или это по какой-то другой причине?

Ответы [ 2 ]

9 голосов
/ 05 февраля 2012

Является ли C не способным иметь 2 функции с одинаковыми именами, которые принимают разные параметры

Это верно, без перегрузки.Вы должны использовать другие имена или выбрать другую схему (например, передать дополнительные аргументы).

0 голосов
/ 05 февраля 2012

Лучший способ справиться с различными потребностями типов данных в одном и том же типе структуры - сделать что-то вроде этого:

struct s_my_struct
{
  void *data;
  char data_type;
}

с:

#define DATA_TYPE_LONGLONGP 'm'
#define DATA_TYPE_CHARP 's'

и использовать вот так:

if (mystruct.data_type == DATA_TYPE_CHARP)
{
  // use of ((char*)mystruct.data)
}
else if (mystruct.data_type == DATA_TYPE_LONGLONG)
{
  // use of ((long long*)mystruct.data)
}

Будьте осторожны, так как вы всегда должны использовать указатель, а не плоские типы, потому что структура хранит данные размера указателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...