c - 在标头中声明变量并在 .c 中定义
问题描述
我的目标是在另一个 .c 文件中使用 templates.c 中定义的变量。
我正在尝试定义在 templates.h 文件中声明的 SHIP(我创建的结构)类型的变量,但出现此错误(其余变量出现类似错误:
templates.c:5:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘->’ token
SHIP* Pickaxe->bitmap={ {'0','1','1','1','0'},
^~
templates.c:10:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘->’ token
SHIP* Pickaxe->size=9;
^~
这是模板.h
typedef struct{
char bitmap[5][5];
int size;
}SHIP;
extern SHIP *Pickaxe;
extern SHIP *Carrier;
extern SHIP *Battleship;
extern SHIP *Submarine;
extern SHIP *Cruiser;
extern SHIP *Destroyer;
和我定义变量的templates.c文件
#include<stdio.h>
#include"templates.h"
#include<stdlib.h>
Pickaxe->bitmap={ {'0','1','1','1','0'},
{'1','0','1','0','1'},
{'0','0','1','0','0'},
{'0','0','1','0','0'},
{'0','0','1','0','0'}};
Pickaxe->size=9;
Carrier->bitmap={{'0','0','1','0','0'},
{'0','0','1','0','0'},
{'0','0','1','0','0'},
{'0','0','1','0','0'},
{'0','0','1','0','0'}};
Carrier->size=5;
Battleship->bitmap={{'0','0','1','0','0'},
{'0','0','1','0','0'},
{'0','0','1','0','0'},
{'0','0','1','0','0'},
{'0','0','0','0','0'}};
Battleship->size=4;
Submarine->bitmap={{'0','0','0','0','0'},
{'0','0','1','0','0'},
{'0','0','1','0','0'},
{'0','0','1','0','0'},
{'0','0','0','0','0'}};
Submarine->size=3;
Cruiser->bitmap={{'0','0','0','0','0'},
{'0','0','1','0','0'},
{'0','0','1','0','0'},
{'0','0','1','0','0'},
{'0','0','0','0','0'}};
Cruiser->size=3;
Destroyer->bitmap={{'0','0','0','0','0'},
{'0','0','1','0','0'},
{'0','0','1','0','0'},
{'0','0','0','0','0'},
{'0','0','0','0','0'}};
Destroyer->size=2;
解决方案
在 .c 文件中,Pickaxe
需要定义指针等并赋值。例子:
// Form the data. Make static not to clutter global name space.
static SHIP Pickaxe_data = {.size = 9, //
.bitmap = { //
{'0', '1', '1', '1', '0'}, //
{'1', '0', '1', '0', '1'}, //
{'0', '0', '1', '0', '0'}, //
{'0', '0', '1', '0', '0'}, //
{'0', '0', '1', '0', '0'}}};
SHIP *Pickaxe = &Pickaxe_data;
先进的:
如果此数据不应更改,请制作const
. 例子:
// .h
extern const SHIP * const Pickaxe;
// ^^^^^ ----- Pointer should not get changed
// ^^^^^ ------------------ Data referenced should not get changed
// .c
static const SHIP Pickaxe_data = {.size = 9, //
.bitmap = { //
{'0', '1', '1', '1', '0'}, //
...
{'0', '0', '1', '0', '0'}}};
const SHIP * const Pickaxe = &Pickaxe_data;
推荐阅读
- mongodb - Amazon DocumentDB 是否支持 BI 连接器?
- excel - 如何使用列名在 Excel 过滤表中选择多个不相邻的列
- ios - SwiftUI - “文本”类型的值没有成员“颜色”错误
- java - fastxml.jackson.databind 无效定义异常
- javascript - 从 JQuery.post() 中恢复数据
- substrate - 我应该如何为地方发展建立共识
- mysql - MySQL 选择 group by 和 Not Null
- python - Python Flask-Uploads 获取上传状态/进度条
- django - 如何让 django 不要求迁移?
- ios - Swift 4.1 支持 sqlite INSERT..ON CONFLICT..DO UPDATE 吗?