繁体   English   中英

在另一个头文件中编译定义函数时出现问题

[英]Having Compiling trouble with definition function in another header

所以我想知道为什么我收到以下错误:

错误1未定义引用“MIN_COUNTER”C:\\ Users \\ Wyatt Crosby \\ Dropbox \\ Atmel Studio \\ ReflowController \\ ReflowController \\ ReflowController \\ Debug /.././ ReflowController.c 146 1 ReflowController

在PID.h中我有:

#ifndef PID_H
#define PID_H

#define LCD_SCREEN_SIZE     16
#define MAX_COUNTS          180
#define OVEN_MAX_TEMP       260
#define OVEN_MIN_TEMP       0
#define MIN_COUNTER(x,a)    tempLookupArray[x] < a ? x : MIN_COUNTER(x+1,a)         
#define FIND_COUNTER(a)     a <= OVEN_MIN_TEMP ? MAX_COUNTS : MIN_COUNTER(0,a)
const float tempLookupArray[MAX_COUNTS];
...

其中tempLookupArray在PID.c中进一步定义:

const float tempLookupArray[MAX_COUNTS] = {
    260.00,
    260.00,
    260.00,
    259.99,
    259.98,
    259.96,
          ...

在ReflowController.c中我包含了PID.h并写入:

TriggerCounter = FIND_COUNTER(PIDgain);

其中PIDgain是局部的并且类型为'float',而TriggerCounter是全局的并且类型为'volatile int'

似乎是我试图从MIN_COUNTER内部调用MIN_COUNTER并且它还没有任何原型(如果它是一个函数)。

你聪明的家伙有什么想法吗?

谢谢!

预处理器完成代码后,

TriggerCounter = FIND_COUNTER(PIDgain);

TriggerCounter = PIDgain <= 0 ? 180 : tempLookupArray[0] < PIDgain ? 0 : MIN_COUNTER(0+1,PIDgain);

此时,预处理器将代码交给编译器和链接器,后者查找名为MIN_COUNTER的方法但找不到。 在这种情况下,预处理器不会递归地工作。 想象一下,如果它做了:你编写的代码会在无限循环中发送编译器; 它需要扩展MIN_COUNTER并且要做到这一点,它需要扩展另一个MIN_COUNTER等等......

尝试使用实际功能而不是宏

int min_counter(int x, float a) {
    return tempLookupArray[x] < a ? x : min_counter(x+1,a);
}

int find_counter(float a) {
    return a <= OVEN_MIN_TEMP ? MAX_COUNTS : min_counter(0,a);
}

除了正确FIND_COUNTER(i++)之外,它还会避免一些宏的注意事项(例如, FIND_COUNTER(i++)会多次递增,而find_counter(i++)不会)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM