【问题标题】:conflicting types for Function’ struct error in CC中函数结构错误的冲突类型
【发布时间】:2016-10-10 03:36:58
【问题描述】:

我目前正在尝试使用头文件将结构传递给不同的文件。它还给了我警告“在参数列表中声明的结构连接”。三是三个文件,piggy1.h、piggg1.c、ear.c。关于为什么我无法编译此代码的任何想法? 非常感谢大家!

//piggy1.h----------------------------------------
void ear(struct Connection *connect1);

//-------------------------------------------------*
//ear.c --------------------------------------------
include "piggy1.h"

void ear(struct Connection *connect1){}

//---------------------------------------------------*
//piggy1.c -------------------------------------------

include "piggy1.h"


struct Connection{
int llport;
int rrport;
char rraddr[50];
int noleft;
int noright;
};

 main(argc, argv)

int argc;
char *argv[];
{
int cases;
int noright = -1;
int noleft = -1;
int rraddr = -1;
int llport = -1;
int rrport = -1;
struct Connection connect;
}

【问题讨论】:

  • 这是一种古老的语法。这段代码来自哪里?
  • 一位老教授的帮助

标签: c struct parameter-passing


【解决方案1】:

我在头文件中定义了结构,这解决了问题!将以下代码放入头文件中。

struct Connection{

   int llport;
   int rrport;
   char rraddr[50];
   int noleft;
   int noright;
};

【讨论】:

  • struct Connection; 放在函数声明之前的标题中就足够了。你不应该编写 K&R 风格的代码;你应该只使用原型。
  • 你能再解释一下吗?你是说使用 1TBS 风格编码吗?什么是原型?
  • 什么是原型? void ear(struct Connection *connect1); 是函数的原型声明; void ear(struct Connection *connect1){ … } 是函数的原型定义。原型在函数参数列表的括号内列出了变量的类型及其名称,这与非原型定义(例如 main(argc, argv) int argc; char *argv[]; 是过时的而非原型的)形成对比。那应该是int main(int argc, char **argv)(或char *argv[]),具有明确的返回类型。那是非原型 (K&R) 函数符号。
  • 我指的不是风格(1TBS 与 Allman 等——我使用 Allman,但您似乎使用 1TBS;两者都是有效的选择)。我指的是“不透明类型”或“不完整类型”。您的头文件可能包含两行:(1) struct Connection; — 表示“有一个名为 struct Connection 的类型,但编译器不需要更多详细信息;和 (2) void ear(struct Connection *connect1); — 表示“有是一个函数 ear,它接受一个指向 struct Connection 的指针并且不返回任何值”。
  • 使用原始标头,struct Connection * 类型仅在原型中已知(它具有“原型范围”),这实际上是无用的(理论上与无用没有太大区别)。事实上,编译器在原型中遇到新类型时通常会抱怨,因为它没用。额外的行声明了函数原型之外的类型,并使一切再次工作。
【解决方案2】:

冲突错误意味着在您的定义部分中传递的参数与在您的声明部分中传递的参数不匹配。

在您的情况下,显示错误是因为 ear 函数的定义和声明是在结构定义之前完成的。

编译器无法识别您的参数,因此会引发错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2013-04-24
    相关资源
    最近更新 更多