2011-10-19 98 views
0

得到這個我不知道這是什麼(C++連接錯誤)

1>main_display.obj : error LNK2005: "struct ALLEGRO_DISPLAY * main_display" ([email protected]@[email protected]@A) already defined in event_queue.obj 
1>main.obj : error LNK2005: "struct ALLEGRO_DISPLAY * main_display" ([email protected]@[email protected]@A) already defined in event_queue.obj 
1>main.obj : error LNK2005: "struct ALLEGRO_TIMER * timer" ([email protected]@[email protected]@A) already defined in event_queue.obj 
1>main.obj : error LNK2005: "struct ALLEGRO_EVENT_QUEUE * event_queue" ([email protected]@[email protected]@A) already defined in event_queue.obj 
1>main_timer.obj : error LNK2005: "struct ALLEGRO_TIMER * timer" ([email protected]@[email protected]@A) already defined in event_queue.obj 

任何想法可能會導致此?

編輯:

main_display.h:

#pragma once 

#include <allegro5/allegro.h> 
#include <stdio.h> 

#define SCREEN_W 640 
#define SCREEN_H 480 

extern ALLEGRO_DISPLAY *main_display = NULL; 

void display_init(); 
void destroy_display(); 

event_queue.h

#pragma once 

#include <stdio.h> 
#include <allegro5/allegro.h> 
#include "main_timer.h" 
#include "main_display.h" 

extern ALLEGRO_EVENT_QUEUE *event_queue = NULL; 

void event_queue_init(); 
void event_queue_destroy(); 
+0

我沒有結構....和名稱是免費的... – Vladp

回答

3

看起來像這些結構在一個頭文件中定義。然後他們將#included分成多個翻譯單元。你需要使它只有一個特定項目的定義。

鑑於這些是全局變量,通常這樣做的方式是在頭文件中標記它們extern,然後在某個翻譯單元中定義它們。

+0

解決它! :) 感謝您的extern餘數 – Vladp

0

我猜你沒有使用inline聲明將函數實現放入頭(.h)文件。

由於頭文件包含在多個源中,函數的主體被多次編譯。鏈接器抱怨不止一次看到該功能。

0

它看起來像你在不同的文件中定義相同的struct

沒有實際看到的文件,這是我們所據我得到...

相關問題