C++ 链接错误(插件中的符号)*
我用c++/c编写代码已经有一段时间了,我对自己做错了什么感到有点困惑 我有三个文件,2.h和1.cpp 文件如下 基本菜单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:
#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