C++ 链接错误(插件中的符号)*

C++ 链接错误(插件中的符号)*,c++,arduino,linker,C++,Arduino,Linker,我用c++/c编写代码已经有一段时间了,我对自己做错了什么感到有点困惑 我有三个文件,2.h和1.cpp 文件如下 基本菜单 #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 4 #define SSD1306_LCDHEIGHT 64 Adafruit_SSD1306 display(OLED_RESET); class BaseMenu { public:

我用c++/c编写代码已经有一段时间了,我对自己做错了什么感到有点困惑

我有三个文件,2.h和1.cpp

文件如下

基本菜单

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
#define SSD1306_LCDHEIGHT 64
Adafruit_SSD1306 display(OLED_RESET);

class BaseMenu {
public:
    // for moving the menu up and down
    void moveDownMenu();
    void moveUpMenu();
    void selectMenu();

    // for changing the text and the positions
    void incrementText();
    void decrementText();

protected:
    //
    char menuTitlePos1[20];
    char menuTitlePos2[20];
    char menuTitlePos3[20];

    bool is_menuPos1_selected = true;
    bool is_menuPos2_selected = false;
    bool is_menuPos3_selected = false;

private:
    virtual void AbstractClass() = 0;
};

有人能解释一下我做错了什么吗?

你做错了的是在头文件中定义
display
,因此通过从两个翻译单元中包含它,可以在两个翻译单元中定义对象。重复的定义。这也是编译器要告诉你的。谢谢!这就解决了问题。
#include "BaseMenu.h"
#include <string.h>

#define ARRAYSIZE 4

class MainMenu : BaseMenu {
private:

    // Constructor
    MainMenu() {};

public:
    static void init();
};
#include "MainMenu.h"

void MainMenu::init() {
    // clearing display
    display.clearDisplay();
    display.display();

    display.setTextSize(1);
    display.setTextColor(WHITE);
    for (int i = 0; i < ARRAYSIZE; i++) {
        if (i == 1) {
            display.setTextSize(1);
            display.setTextColor(BLACK, WHITE);
            //display.println(MainMenuTitles[i]);
         }
        else {
            display.setTextSize(1);
            display.setTextColor(WHITE);
            //display.println(MainMenuTitles[i]);
        }
    }

    display.display();
}
MainMenu.cpp.o (symbol from plugin)*: In function display
(.text+0x0)*: multiple definition of display
TestingLibrary.cpp.o (symbol from plugin)*: (.text+0x0): first defined here

collect2.exe*: error: ld returned 1 exit status