[英]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.