のtypedef私は、コンパイル/リンクエラーを持っています。 typedef構造体に何か問題があったのですか? main.cは単にinitialize()を呼び出します。 initialize()関数は以下の通りです。簡潔にするために、私はすべての#defineマクロを取り出しました。メインはコードのさらに下に含まれています。リンカエラーは、次のように構造体
ありがとうございました。
//globals.h
#ifndef memory_manager_globals_h
#define memory_manager_globals_h
/******** Memory Table Entry Data Structure**********/
typedef struct
{
uint32_t block_address;
uint32_t next_free_block;
}mem_table_entry_t;
/******** Memory Table Data Structure**********/
typedef struct
{
mem_table_entry_t two_kib[8];
mem_table_entry_t one_kib[16];
mem_table_entry_t half_kib[32];
mem_table_entry_t quarter_kib[64];
mem_table_entry_t eighth_kib[128];
}mem_table_t;
extern mem_table_t memory_table;
#endif
...
//MAIN.C
#include <stdio.h>
#include "globals.h"
void initialize(void)
{
int block_count = 0; //
uint32_t dynamic_address = HEAP_START;
while(block_count <= INITIALIZE_BLOCK_COUNT)
{
if((block_count >= TWO_KIB_LO) && (block_count < TWO_KIB_HI))
{
memory_table.two_kib[block_count].block_address = HEAP_START;
dynamic_address = dynamic_address + 0x800;
memory_table.two_kib[block_count].next_free_block = dynamic_address;
block_count++;
}
...
次のように.hファイルの正しい形式があるべき[SOLVED]:
/******** Memory Table Entry Data Structure**********/
typedef struct
{
uint32_t block_address;
uint32_t next_free_block;
}mem_table_entry_t;
/******** Memory Table Data Structure**********/
typedef struct
{
mem_table_entry_t two_kib[8];
mem_table_entry_t one_kib[16];
mem_table_entry_t half_kib[32];
mem_table_entry_t quarter_kib[64];
mem_table_entry_t eighth_kib[128];
}mem_table_t;
mem_table_t memory_table;
extern mem_table_t memory_table;
そして今 'mem_table'の**定義**を持つファイルを表示:
は連結問題を解決するために、あなたのCファイルに次の行を追加します。 – Olaf
@Olaf - ありがとう。 – Darrell
これは間違っています!ヘッダは決して_definitions_を持つべきではありません( 'inline'関数は例外ですが、それは別の主題です)!良いCの本は、ここでpssibleよりもはるかに良い詳細を述べる - 申し訳ありませんが、我々は家庭教師もいません。 – Olaf