我正在尝试定义global pointer to a struct
- 字体 - 因此我可以在项目中随时使用它。
编译时,我在initializer element is not constant
的第Font_t* font = load_font("ubuntu");
行收到此错误Font.c
。
Font.h:
#ifndef __FONT_H
#define __FONT_H
#include "Bitmap.h"
#include "Utilities.h"
/// Represents a Font
typedef struct {
int letterSpacing;
// symbols
Bitmap_t* space;
(...)
Bitmap_t* y;
Bitmap_t* z;
} Font_t;
extern Font_t* font;
/**
* @brief Loads a font from disk
*
* @param filename name of the font to load
*/
Font_t* load_font(char const* fontName);
Font.c:
#include "Font.h"
#include "stdio.h"
#include "Utilities.h"
#include "video_gr.h"
Font_t* font = load_font("ubuntu");
Font_t* load_font(char const* fontName) {
Font_t* font = (Font_t*) malloc(sizeof(Font_t));
font->letterSpacing = 1;
char path[200];
strcpy(path, fontsPath);
strcat(path, fontName);
char tempPath[200];
strcpy(tempPath, path); strcat(tempPath, "/space.bmp"); font->space = load_bitmap(tempPath);
(...)
strcpy(tempPath, path); strcat(tempPath, "/y.bmp"); font->y = load_bitmap(tempPath);
strcpy(tempPath, path); strcat(tempPath, "/z.bmp"); font->z = load_bitmap(tempPath);
return font;
}
答案 0 :(得分:3)
Font_t* font = load_font("ubuntu");
你做不到。您不能在全局范围内以这种方式调用函数。您需要拆分声明和初始化。
在全球范围内:
Font_t* font;
首次使用时,在主要内部:
font = load_font("ubuntu");
答案 1 :(得分:1)
您无法使用不是常量值的内容初始化全局变量。放置这一行:
font = load_font("ubuntu");
在您的代码中,在尝试使用font
的任何其他代码之前。
仅作为全球声明留下这一行:
Font_t* font = NULL;
答案 2 :(得分:1)
你可以这样做,以便在字体模块中保持字体的初始化。
部首:
// extern Font_t* font; // delete this
Font_t* get_default_font(); // use a function instead
来源:
Font_t* g_default_font = NULL;
Font_t* get_default_font() {
if(!font) {
g_default_font = load_font("ubuntu");
}
return g_default_font;
}
答案 3 :(得分:0)
您是否在所有功能之外使用此功能
Font_t * font = load_font(“ubuntu”);
如果是的话,我认为你不会这样做吗?