【问题标题】:Struct of 2D arrays within a class C++C++ 类中二维数组的结构
【发布时间】:2018-03-19 19:38:24
【问题描述】:

这可能是一件非常简单的事情,但我是 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);
    }


}

我还没有尝试制作一个结构来封装所有二维数组,因为在这个阶段代码已经无法正常工作,我想知道为什么以及我可以做些什么来修复它。

我得到的两个错误对我来说毫无意义:

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).

感谢您的帮助!

【问题讨论】:

  • 你在哪里定义你的静态static const char snake_title[24][70];
  • 相关:stackoverflow.com/questions/17056882/… 。同样在init_array 中,您定义了另一个名为snake_title 的变量。
  • @KillzoneKid 在头文件的公共部分?
  • @AndreaLoriedo 这是你的声明,但你的定义在哪里?
  • const char snake_title[24][70] = { 是一个局部变量,它会影响 static const char snake_title[24][70]; 在几秒钟内完成这个问题。

标签: c++ arrays struct


【解决方案1】:

当您声明您的static const char snake_title[24][70]; 成员时,您没有为其提供定义。

静态数据成员在其类定义中的声明不是 定义,并且可能是除 cv 限定之外的不完整类型 空白。静态数据成员的定义应出现在 包含成员的类定义的命名空间范围。在里面 命名空间范围内的定义,静态数据成员的名称 应使用 :: 运算符由其类名限定。这 静态数据成员定义中的初始化表达式在 其类的范围

尝试在void Menu::init_array() 中声明和定义同名变量与您的成员变量无关。您需要将init_array() 全部删除,而是在Menu.cpp 中定义您的snake_title,如下所示:

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},
    ......
    ......
    ......
};

【讨论】:

  • 非常感谢,编译成功了!如果我在主文件中调用欢迎函数怎么办?我正在尝试但没有成功,我希望将位图产生的“精灵”打印到液晶屏上。
猜你喜欢
  • 2021-09-22
  • 1970-01-01
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
  • 2016-07-28
  • 2018-05-09
相关资源
最近更新 更多