【问题标题】:Using struct variables in functions - Conflicting types在函数中使用结构变量 - 冲突类型
【发布时间】:2021-09-07 07:02:12
【问题描述】:

我正在尝试将结构变量传递给函数,但我收到:

error: conflicting types for 'referenzspannung'
void referenzspannung(struct ADMESSUNG *mess) {
     ^~~~~~~~~~~~~~~~

在我的measure.h我写了原型:

void referenzspannung(struct ADMESSUNG *mess);

measure.c 中有结构+函数:

struct ADMESSUNG {
    unsigned long Coderef;
    double Uref;
    double Stcal;
    double Offset;
    unsigned long Temperaturcode;
    double Temperaturavin;
    double RTD;
    double R;
    double Tempwert;
    unsigned long Phcode;
    double Phavin;
    double Stprobe;
    double PHWert;
};
struct ADMESSUNG mess;
void referenzspannung(struct ADMESSUNG *mess) {
    AD7793_SetIntReference(AD7793_REFSEL_INT);
    AD7793_SetExcitDirection(AD7793_DIR_IEXC1_IOUT2_IEXC2_IOUT1);
    AD7793_SetExcitCurrent(AD7793_EN_IXCEN_210uA);
    AD7793_SetChannel(AD7793_CH_AIN3P_AIN3M);
    mess->Coderef = AD7793_ContinuousReadAvg(50);
    mess->Uref = ((mess->Coderef / 8388608) - 1) * 1.17; // code in voltage
}

然后在我的main.c 中调用该函数:

referenzspannung(struct ADMESSUNG *mess);

有人看到错误吗?我认为我做所有事情的顺序都是正确的,而且我有来自多个网站的语法。

【问题讨论】:

  • referenzspannung(struct ADMESSUNG *mess);不是怎么调用函数,它看起来更像是一个函数声明,只不过没有返回类型而已。
  • 你不叫它。你定义它。
  • 那我该怎么称呼它呢?我希望它为其他函数计算 Uref
  • 老实说,几乎任何体面的书籍、教程或课程都应该教你如何调用函数。我什至打赌你之前调用过很多函数(例如scanfprintf),没有任何问题。
  • 你最喜欢的C入门级书籍将在“函数”一章中演示如何调用函数...

标签: c struct


【解决方案1】:

将定义 struct ADMESSUNG {...} 移动到您的 .h 文件中。

编译器在遇到void referenzspannung(struct ADMESSUNG *mess); 时会假设结构的外观,但并不知道结构是什么样的。

编译器会警告您这些假设。在 gcc 中使用 -Wall 获取所有警告。

实例声明 struct ADMESSUNG mess; 需要在 main.c 中才能在它被引用的地方可见,或者应该在带有 extern 修饰符的 .h 中。

函数调用应该引用结构实例referenzspannung(&mess);,因为它不是指针。

【讨论】:

  • 在函数声明之前在头文件中放置一个前向声明'struct ADMESSUNG'就足够了。
  • 我认为他很好,只是在 .h 文件中使用 struct ADMESSUNG
  • 好的,所以我确实检查了这一点,我是对的,您可以只将 struct ASDMESSUNG; 放在头文件中,将其余部分留在源文件中。
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 2023-03-24
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-02
  • 2013-05-02
相关资源
最近更新 更多