【发布时间】:2014-09-12 04:50:24
【问题描述】:
我正在做一个很长的层次结构,我有下一个问题:
ifndef AGENT_H_
#define AGENT_H_
#include <OgreSceneNode.h>
#include "../AStar/ASTAR.h"
#include <limits>
我有这个包含 ASTAR.h 的 .h,以及类似的长层次结构:
Agent
|
-Character-
| |
Ally Foe
所有这些 .h 只包括它的父亲。
当我编译时,ASTAR.h 出现很多多重定义错误,我不知道为什么会出现这种情况,因为我在 ASTAR.h 中有 #ifndef 代码
有人知道为什么会这样吗?
uilding target: sieis_vg
Invoking: Cross G++ Linker
g++ -L/usr/local/lib -L/usr/local/lib/OGRE -o "sieis_vg" ./Agents/AxeThrower.o ./Agents/Berserk.o ./Agents/Tarkan.o ./Agents/WoadRaider.o ./DotSceneLoader.o ./EngineCameraController.o ./EngineFrameListener.o ./EngineInputListener.o ./EngineRenderer.o ./EngineSceneLoader.o ./EngineSceneManager.o ./EngineSound.o ./EngineStatus.o ./EngineWindowListener.o ./IAController.o ./stdafx.o -lOgreMain -lOgreOverlay -lOgreTerrain -lOIS -lboost_system -lboost_thread -lfmodex64-4.44.41 -lfmodexL64-4.44.41
./Agents/Berserk.o:(.data+0x0): definiciones múltiples de `world_map'
./Agents/AxeThrower.o:(.data+0x0): primero se definió aquí
./Agents/Berserk.o: En la función `__gnu_cxx::new_allocator<AStarSearch<MapSearchNode>::Node*>::new_allocator()':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:257: definiciones múltiples de `GetMap(int, int)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:257: primero se definió aquí
./Agents/Berserk.o: En la función `MapSearchNode::IsSameState(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:296: definiciones múltiples de `MapSearchNode::IsSameState(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:296: primero se definió aquí
./Agents/Berserk.o: En la función `MapSearchNode::PrintNodeInfo()':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:312: definiciones múltiples de `MapSearchNode::PrintNodeInfo()'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:312: primero se definió aquí
./Agents/Berserk.o: En la función `MapSearchNode::GoalDistanceEstimate(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:323: definiciones múltiples de `MapSearchNode::GoalDistanceEstimate(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:323: primero se definió aquí
./Agents/Berserk.o: En la función `MapSearchNode::IsGoal(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:332: definiciones múltiples de `MapSearchNode::IsGoal(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:332: primero se definió aquí
./Agents/Berserk.o: En la función `Character::continueWalking(float)':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:348: definiciones múltiples de `MapSearchNode::GetSuccessors(AStarSearch<MapSearchNode>*, MapSearchNode*)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:348: primero se definió aquí
./Agents/Berserk.o: En la función `MapSearchNode::GetCost(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:405: definiciones múltiples de `MapSearchNode::GetCost(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:405: primero se definió aquí
./Agents/Berserk.o: En la función `MapSearchNode::getPath()':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:414: definiciones múltiples de `MapSearchNode::getPath()'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:414: primero se definió aquí
./Agents/Tarkan.o:(.data+0x0): definiciones múltiples de `world_map'
./Agents/AxeThrower.o:(.data+0x0): primero se definió aquí
./Agents/Tarkan.o: En la función `__gnu_cxx::new_allocator<AStarSearch<MapSearchNode>::Node*>::new_allocator()':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:257: definiciones múltiples de `GetMap(int, int)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:257: primero se definió aquí
./Agents/Tarkan.o: En la función `MapSearchNode::IsSameState(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:296: definiciones múltiples de `MapSearchNode::IsSameState(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:296: primero se definió aquí
./Agents/Tarkan.o: En la función `MapSearchNode::PrintNodeInfo()':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:312: definiciones múltiples de `MapSearchNode::PrintNodeInfo()'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:312: primero se definió aquí
./Agents/Tarkan.o: En la función `MapSearchNode::GoalDistanceEstimate(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:323: definiciones múltiples de `MapSearchNode::GoalDistanceEstimate(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:323: primero se definió aquí
./Agents/Tarkan.o: En la función `MapSearchNode::IsGoal(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:332: definiciones múltiples de `MapSearchNode::IsGoal(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:332: primero se definió aquí
./Agents/Tarkan.o: En la función `Character::continueWalking(float)':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:348: definiciones múltiples de `MapSearchNode::GetSuccessors(AStarSearch<MapSearchNode>*, MapSearchNode*)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:348: primero se definió aquí
./Agents/Tarkan.o: En la función `MapSearchNode::GetCost(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:405: definiciones múltiples de `MapSearchNode::GetCost(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:405: primero se definió aquí
./Agents/Tarkan.o: En la función `MapSearchNode::getPath()':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:414: definiciones múltiples de `MapSearchNode::getPath()'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:414: primero se definió aquí
./Agents/WoadRaider.o:(.data+0x0): definiciones múltiples de `world_map'
./Agents/AxeThrower.o:(.data+0x0): primero se definió aquí
./Agents/WoadRaider.o: En la función `__gnu_cxx::new_allocator<AStarSearch<MapSearchNode>::Node*>::new_allocator()':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:257: definiciones múltiples de `GetMap(int, int)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:257: primero se definió aquí
./Agents/WoadRaider.o: En la función `MapSearchNode::IsSameState(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:296: definiciones múltiples de `MapSearchNode::IsSameState(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:296: primero se definió aquí
./Agents/WoadRaider.o: En la función `MapSearchNode::PrintNodeInfo()':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:312: definiciones múltiples de `MapSearchNode::PrintNodeInfo()'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:312: primero se definió aquí
./Agents/WoadRaider.o: En la función `MapSearchNode::GoalDistanceEstimate(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:323: definiciones múltiples de `MapSearchNode::GoalDistanceEstimate(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:323: primero se definió aquí
./Agents/WoadRaider.o: En la función `MapSearchNode::IsGoal(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:332: definiciones múltiples de `MapSearchNode::IsGoal(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:332: primero se definió aquí
./Agents/WoadRaider.o: En la función `Character::continueWalking(float)':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:348: definiciones múltiples de `MapSearchNode::GetSuccessors(AStarSearch<MapSearchNode>*, MapSearchNode*)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:348: primero se definió aquí
./Agents/WoadRaider.o: En la función `MapSearchNode::GetCost(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:405: definiciones múltiples de `MapSearchNode::GetCost(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:405: primero se definió aquí
./Agents/WoadRaider.o: En la función `MapSearchNode::getPath()':
/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:414: definiciones múltiples de `MapSearchNode::getPath()'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:414: primero se definió aquí
./IAController.o:(.data+0x0): definiciones múltiples de `world_map'
./Agents/AxeThrower.o:(.data+0x0): primero se definió aquí
./IAController.o: En la función `__gnu_cxx::new_allocator<AStarSearch<MapSearchNode>::Node*>::new_allocator()':
/home/sergio/git/sieis_vg/Debug/.././Agents/../AStar/ASTAR.h:257: definiciones múltiples de `GetMap(int, int)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:257: primero se definió aquí
./IAController.o: En la función `MapSearchNode::IsSameState(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/.././Agents/../AStar/ASTAR.h:296: definiciones múltiples de `MapSearchNode::IsSameState(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:296: primero se definió aquí
./IAController.o: En la función `MapSearchNode::PrintNodeInfo()':
/home/sergio/git/sieis_vg/Debug/.././Agents/../AStar/ASTAR.h:312: definiciones múltiples de `MapSearchNode::PrintNodeInfo()'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:312: primero se definió aquí
./IAController.o: En la función `MapSearchNode::GoalDistanceEstimate(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/.././Agents/../AStar/ASTAR.h:323: definiciones múltiples de `MapSearchNode::GoalDistanceEstimate(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:323: primero se definió aquí
./IAController.o: En la función `MapSearchNode::IsGoal(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/.././Agents/../AStar/ASTAR.h:332: definiciones múltiples de `MapSearchNode::IsGoal(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:332: primero se definió aquí
./IAController.o: En la función `void std::__adjust_heap<__gnu_cxx::__normal_iterator<AStarSearch<MapSearchNode>::Node**, std::vector<AStarSearch<MapSearchNode>::Node*, std::allocator<AStarSearch<MapSearchNode>::Node*> > >, long, AStarSearch<MapSearchNode>::Node*, AStarSearch<MapSearchNode>::HeapCompare_f>(__gnu_cxx::__normal_iterator<AStarSearch<MapSearchNode>::Node**, std::vector<AStarSearch<MapSearchNode>::Node*, std::allocator<AStarSearch<MapSearchNode>::Node*> > >, long, long, AStarSearch<MapSearchNode>::Node*, AStarSearch<MapSearchNode>::HeapCompare_f)':
/home/sergio/git/sieis_vg/Debug/.././Agents/../AStar/ASTAR.h:348: definiciones múltiples de `MapSearchNode::GetSuccessors(AStarSearch<MapSearchNode>*, MapSearchNode*)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:348: primero se definió aquí
./IAController.o: En la función `MapSearchNode::GetCost(MapSearchNode&)':
/home/sergio/git/sieis_vg/Debug/.././Agents/../AStar/ASTAR.h:405: definiciones múltiples de `MapSearchNode::GetCost(MapSearchNode&)'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:405: primero se definió aquí
./IAController.o: En la función `MapSearchNode::getPath()':
/home/sergio/git/sieis_vg/Debug/.././Agents/../AStar/ASTAR.h:414: definiciones múltiples de `MapSearchNode::getPath()'
./Agents/AxeThrower.o:/home/sergio/git/sieis_vg/Debug/../Agents/../AStar/ASTAR.h:414: primero se definió aquí
/usr/bin/ld: warning: libboost_thread.so.1.54.0, needed by /usr/local/lib/libOgreMain.so, may conflict with libboost_thread.so.1.55.0
/usr/bin/ld: warning: libboost_system.so.1.54.0, needed by /usr/local/lib/libOgreMain.so, may conflict with libboost_system.so.1.55.0
collect2: error: ld returned 1 exit status
make: *** [sieis_vg] Error 1
【问题讨论】: