已声明但从未定义的错误函数
error function declared but never defined
我在 codeVision AVR 中向我的 c 项目添加了一个库。当我想使用它的功能时收到此错误:
函数 'function name' 已声明但从未定义。
这是我的代码:
#include "pid.h"
#include <mega32.h>
PidType _pid;
void main(void)
{
//some uC hardware initializing codes which are removed here to simplify code
PID_Compute(&_pid);
while (1)
{
// Place your code here
}
}
在pid.h中:
.
.
bool PID_Compute(PidType* pid);
.
.
和pid.c:
#include "pid.h"
.
.
bool PID_Compute(PidType* pid) {
if (!pid->inAuto) {
return false;
}
FloatType input = pid->myInput;
FloatType error = pid->mySetpoint - input;
pid->ITerm += (pid->ki * error);
if (pid->ITerm > pid->outMax)
pid->ITerm = pid->outMax;
else if (pid->ITerm < pid->outMin)
pid->ITerm = pid->outMin;
FloatType dInput = (input - pid->lastInput);
FloatType output = pid->kp * error + pid->ITerm - pid->kd * dInput;
if (output > pid->outMax)
output = pid->outMax;
else if (output < pid->outMin)
output = pid->outMin;
pid->myOutput = output;
pid->lastInput = input;
return true;
}
错误:
函数 'PID_Compute' 已声明,但从未定义。
问题出在哪里?
编辑:
为了将库添加到我的项目中,我将 .c 和 .h 库文件放在与我的主项目文件相同的文件夹中:
然后在我的主文件中#include "pid.h":
#include "pid.h"
#include <mega32.h>
// Declare your global variables here
PidType _pid;
void main(void)
{
.
.
我的错误和警告:
编辑2:
我简化了代码,现在可以向您展示整个代码:
主要代码:
#include "pid.h"
PidType _pid;
void main(void)
{
PID_Compute(&_pid);
while (1)
{
}
}
pid.h:
#ifndef PID_H
#define PID_H
#include <stdbool.h>
typedef struct {
int i;
} PidType;
bool PID_Compute(PidType* pid);
#endif
pid.c:
#include "pid.h"
bool PID_Compute(PidType* pid) {
pid->i = 2;
return true;
}
从带有文件树视图的屏幕截图可以清楚地看出文件“pid.c”不是项目的一部分。
将它移到您的项目中。然后它应该在没有链接器错误的情况下构建。
这并不表示文件系统中的位置。我在您的项目中引用了 IDE 的“虚拟”视图。
谢谢大家。
如您所说,pid.c 未添加到项目中。
对于那些可能面临同样问题的人:
在 codeVision AVR 中,我们必须从 project->configure->files->input files->add
添加 .c 文件到项目
我将 .c 文件添加到项目中,错误消失了。
我在 codeVision AVR 中向我的 c 项目添加了一个库。当我想使用它的功能时收到此错误: 函数 'function name' 已声明但从未定义。 这是我的代码:
#include "pid.h"
#include <mega32.h>
PidType _pid;
void main(void)
{
//some uC hardware initializing codes which are removed here to simplify code
PID_Compute(&_pid);
while (1)
{
// Place your code here
}
}
在pid.h中:
.
.
bool PID_Compute(PidType* pid);
.
.
和pid.c:
#include "pid.h"
.
.
bool PID_Compute(PidType* pid) {
if (!pid->inAuto) {
return false;
}
FloatType input = pid->myInput;
FloatType error = pid->mySetpoint - input;
pid->ITerm += (pid->ki * error);
if (pid->ITerm > pid->outMax)
pid->ITerm = pid->outMax;
else if (pid->ITerm < pid->outMin)
pid->ITerm = pid->outMin;
FloatType dInput = (input - pid->lastInput);
FloatType output = pid->kp * error + pid->ITerm - pid->kd * dInput;
if (output > pid->outMax)
output = pid->outMax;
else if (output < pid->outMin)
output = pid->outMin;
pid->myOutput = output;
pid->lastInput = input;
return true;
}
错误:
函数 'PID_Compute' 已声明,但从未定义。
问题出在哪里?
编辑:
为了将库添加到我的项目中,我将 .c 和 .h 库文件放在与我的主项目文件相同的文件夹中:
然后在我的主文件中#include "pid.h":
#include "pid.h"
#include <mega32.h>
// Declare your global variables here
PidType _pid;
void main(void)
{
.
.
我的错误和警告:
编辑2: 我简化了代码,现在可以向您展示整个代码: 主要代码:
#include "pid.h"
PidType _pid;
void main(void)
{
PID_Compute(&_pid);
while (1)
{
}
}
pid.h:
#ifndef PID_H
#define PID_H
#include <stdbool.h>
typedef struct {
int i;
} PidType;
bool PID_Compute(PidType* pid);
#endif
pid.c:
#include "pid.h"
bool PID_Compute(PidType* pid) {
pid->i = 2;
return true;
}
从带有文件树视图的屏幕截图可以清楚地看出文件“pid.c”不是项目的一部分。
将它移到您的项目中。然后它应该在没有链接器错误的情况下构建。
这并不表示文件系统中的位置。我在您的项目中引用了 IDE 的“虚拟”视图。
谢谢大家。 如您所说,pid.c 未添加到项目中。 对于那些可能面临同样问题的人: 在 codeVision AVR 中,我们必须从 project->configure->files->input files->add
添加 .c 文件到项目我将 .c 文件添加到项目中,错误消失了。