这可能是一件非常简单的事情,但我是C ++的新手,所以需要帮助。
我正在尝试制作一个简单的蛇游戏,用C ++编写并打算在MBED MCU上运行。为了使代码尽可能保持整洁,我创建了一个类来存储所有位图(即1和0的2D数组),这些位将在游戏的菜单屏幕上作为设置和交互图标打印。
头文件(Menu.h)如下所示:
#ifndef MENU_H
#define MENU_H
#include "mbed.h"
#include "N5110.h" //lcd screen
#include "Gamepad.h" //board on which the MBED is mounted, with leds etc.
class Menu {
public:
Menu();
~Menu();
static const char snake_title[24][70]; //This is the first of several
// arrays that I want to include in the struct
void init_array();
void welcome(N5110 &lcd, Gamepad &pad);
private:
};
#endif
这是实现文件(Menu.cpp)
#include "Menu.h"
Menu::Menu()
{
}
Menu::~Menu()
{
}
void Menu::init_array()
{
const char snake_title[24][70] = {
//Massive array of bitmaps e.g. {0,0,0,0,0,0,1,1,0,1,1,1,1.....0,0,0},
......
......
......
};
}
void Menu::welcome(N5110 &lcd, Gamepad &pad)
{
lcd.drawSprite(7,12,24,70,(int *)snake_title); //draw sprite, position 68,12
lcd.printString("Press Start",10,5);
lcd.refresh();
// wait flashing LEDs until start button is pressed
while ( pad.check_event(Gamepad::START_PRESSED) == false) {
pad.leds_on();
wait(0.1);
pad.leds_off();
wait(0.1);
}
}
我还没有尝试过封装所有2D数组的结构,因为在这个阶段代码已经无法正常工作了,我想知道为什么以及我可以做些什么来修复它。
我得到的两个错误对我没有意义:
Error: "/tmp/CLhdO7", line 124 (column 3): Warning: L6312W: Empty Execution region description for region RW_IRAM1
Error: Undefined symbol Menu::snake_title (referred from /build/Menu/Menu.K64F.o).
感谢您的帮助!
答案 0 :(得分:0)
当您声明static const char snake_title[24][70];
成员时,您没有为其提供定义。
在其类定义中声明静态数据成员不是 定义,除了cv-qualified之外,可能是不完整的类型 无效。静态数据成员的定义应出现在 命名空间范围包含成员的类定义。在里面 命名空间范围内的定义,静态数据成员的名称 应使用::运算符通过其类名限定。该 静态数据成员定义中的初始化表达式 其类的范围
尝试在void Menu::init_array()
内声明和定义具有相同名称的变量与您的成员变量无关。你需要的是一起摆脱init_array()
,而是在snake_title
中定义你的Menu.cpp
:
const char Menu::snake_title[24][70] = {
//Massive array of bitmaps e.g. {0,0,0,0,0,0,1,1,0,1,1,1,1.....0,0,0},
......
......
......
};