我有一個非常奇怪的問題,在庫中的一些函數中我使用了一個圖形化的液晶顯示屏,它通過硬件序列與我的arduino進行通信。這只是屏幕使用的串行協議的簡單包裝。我的書架中隨機未定義的參考文獻
基本上,每當我從該庫中調用某些函數時,我都會收到「Undefined Reference ...」錯誤。然而,其他功能正常工作,我無法辨別正在工作的人和沒有正在工作的人之間的語法差異。
例如,我有一個箱子功能。當我打電話給它,並給它的四個整數,它期待它工作正常。 fill_box
,circle
和erase_box
也是如此。
但是像backlight
或offset
或甚至被稱爲arg
(反映我當時感受的方式)的函數會導致代碼觸發未定義的引用。我無法弄清楚爲什麼......我的錯誤是什麼?
下面是正常工作的代碼示例:
#include <gLCD.h>
gLCD obj = gLCD();
void setup(){
obj.fill_box(0,0,60,60);
obj.erase_box(5,5,15,15);
obj.circle(50,50,25);
}
void loop(){delay(1000);}
但只要我添加任何東西像obj.line
,這樣
#include <gLCD.h>
gLCD obj = gLCD();
void setup(){
obj.fill_box(0,0,60,60);
obj.erase_box(5,5,15,15);
obj.circle(50,50,25);
obj.line(0,0,40,40);
}
void loop(){
delay(1000);
}
然後我得到一個未定義的引用。與obj.offset
,obj.blacklight
和pixel
相同。
我只是不知道爲什麼會發生這種情況。而且我開始變得真的很沮喪,我甚至不能寫一個簡單的庫......總之,這裏的問題庫:
這是gLCD.cpp
:
#include "gLCD.h"
HardwareSerial Uart = HardwareSerial();
gLCD::gLCD(){
Uart.begin(115200);
}
void gLCD::box(int x1, int y1, int x2, int y2){
Uart.write(0x7C);
Uart.write(0x0F);
Uart.write(x1);
Uart.write(y1);
Uart.write(x2);
Uart.write(y2);
Uart.write(0x01);
}
void gLCD::fill_box(int x1, int y1, int x2, int y2){
Uart.write(0x7C);
Uart.write(0x12);
Uart.write(x1);
Uart.write(y1);
Uart.write(x2);
Uart.write(y2);
Uart.write(0xFF);
}
void gLCD::circle(int x1, int y1, int rad){
Uart.write(0x7C);
Uart.write(0x03);
Uart.write(x1);
Uart.write(y1);
Uart.write(rad);
Uart.write(0x01);
}
void gLCD::erase_block(int x1, int y1, int x2, int y2){
Uart.write(0x7C);
Uart.write(0x05);
Uart.write(x1);
Uart.write(y1);
Uart.write(x2);
Uart.write(y2);
}
void arg(){
Uart.print("this is bullsh*t!");
}
void offset(int x1, int y1){
Uart.write(0x7C);
Uart.write(0x18);
Uart.write(x1);
Uart.write(0x7C);
Uart.write(0x19);
Uart.write(y1);
}
void backlight(int duty_cycle){
Uart.write(0x7C);
Uart.write(0x02);
Uart.write(duty_cycle);
}
void line(int x1, int y1, int x2, int y2){
Uart.write(0x7C);
Uart.write(0x0C);
Uart.write(x1);
Uart.write(y1);
Uart.write(x2);
Uart.write(y2);
Uart.write(0x01);
}
void pixel(int x ,int y ,int sr){
Uart.write(0x7C);
Uart.write(0x10);
Uart.write(x);
Uart.write(y);
Uart.write(sr);
}
這是gLCD.h :
#ifndef gLCD_h
#define gLCD_h
#include <Arduino.h>
class gLCD{
public:
gLCD();
void box(int x1, int y1, int x2, int y2);
void fill_box(int x1, int y1, int x2, int y2);
void circle(int x1, int y1, int rad);
void offset(int x1, int y1);
void backlight(int duty_cycle);
void line(int x1, int y1, int x2, int y2);
void pixel(int x ,int y ,int sr);
void erase_block(int x1, int y1, int x2, int y2);
void arg();
};
#endif
哇;我覺得自己像個白癡。謝謝,雖然;現在我可以繼續努力。但該死的...哈哈 –