【问题标题】:C conflicting types for function with different arguments具有不同参数的函数的 C 冲突类型
【发布时间】:2012-02-04 21:26:23
【问题描述】:

我有一个带有 2 个初始化函数的结构,它们接受不同类型的参数:

struct myStruct;
typedef struct myStruct *myStruct;

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

我在第二个声明中收到 conflicting types for 'myStructMake' 错误。 C 是否不能拥有 2 个采用不同参数的同名函数?还是其他原因?

【问题讨论】:

  • C 不是 C++ - 它没有函数重载。

标签: c struct initialization


【解决方案1】:

C 不能有 2 个同名的函数 不同的参数

没错,没有超载。您必须使用不同的名称或选择其他方案(例如传递额外的参数)。

【讨论】:

    【解决方案2】:

    在同一结构类型中处理不同数据类型需求的最佳方法是执行以下操作:

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

    请注意,您必须始终使用指针而不是平面类型,因为结构存储指针大小的数据。

    【讨论】:

    • 我实际上并没有直接存储初始化参数,所以我实际上不需要将它与它的类型一起保存在void* 中。给定的值被处理成完全不同的结构,而不是存储。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2014-03-18
    • 2016-11-05
    相关资源
    最近更新 更多