鎖定47分鐘。對此問題的評論已被禁用,但它仍在接受新的答案和其他互動。了解更多。
Boardcomputer.h:
#ifndef BOARDCOMPUTER_H
#define BOARDCOMPUTER_H
#include <Arduino.h>
#include <TFT_eSPI.h>
TFT_eSPI disp = TFT_eSPI();
...
#endif
Boardcomputer.cpp:
#include <Boardcomputer.h>
^^use disp functions^^
...
錯誤:
.pio\build\EmmaChip\lib782\libBoardcomputer.a(Boardcomputer.cpp.o):(.bss.disp 0x0): multiple definition of `disp'
.pio\build\EmmaChip\src\main.cpp.o:(.bss.disp 0x0): first defined here
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\EmmaChip\firmware.elf] Error 1
這是我嘗試過的:
- 制作一個額外的頭檔案并
#pragma once在頂部添加 - 制作一個額外的 Lib 并添加典型的
#ifndef; #define; #endif行
你有一些想法來解決這個問題嗎?我沒有多次定義“disp”。僅在一個標題中。
uj5u.com熱心網友回復:
問題在這里:
#ifndef BOARDCOMPUTER_H
#define BOARDCOMPUTER_H
#include <Arduino.h>
#include <TFT_eSPI.h>
TFT_eSPI disp = TFT_eSPI();
...
#endif
您disp在頭檔案中定義。在頭檔案中定義變數是完全錯誤的,它不能作業(除非你將 .h 檔案包含在單個 .c 檔案中,但是 .h 檔案無論如何都是毫無意義的),它會導致這些“多重定義”問題鏈接時間。
這發生在這里:
- 您包含
Boardcomputer.h在foo.c,因此foo.o將包含一個變數disp。代碼編譯良好。 - 您包含
Boardcomputer.h在bar.c,因此bar.o將包含一個變數disp。代碼編譯良好。 - 您鏈接
foo.oandbar.o為了生成可執行檔案,聯結器看到兩個變數disp,一個 inbar.o和一個 infoo.o,因此出現多重定義錯誤
你要這個:
板機.h
#ifndef BOARDCOMPUTER_H
#define BOARDCOMPUTER_H
#include <Arduino.h>
#include <TFT_eSPI.h>
extern TFT_eSPI disp; // declare it here
#endif
Boardcomputer.c
#include "Boardcomputer.h"
...
TFT_eSPI disp = TFT_eSPI(); // define it here
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/452231.html
