2010-12-08 125 views
1

我正在写一个简单的游戏引擎,和我有EntityComponent.h文件:找不到符号链接库

#ifndef Psycho2D_Core_EntityComponent_ 
#define Psycho2D_Core_EntityComponent_ 

#include <string> 

namespace psycho2d{ 

    class EntityComponent{ 

    private: 
     std::string m_name; 

    public: 
     EntityComponent(const std::string &name); 

     virtual ~EntityComponent(); 

     const std::string& getName() const; 

     virtual void initialize() = 0; 

     virtual void loadProperties() = 0;  

     virtual void update() = 0; 

     virtual void destroy() = 0; 

    }; 

} 

#endif 

,相对EntityComponent.cpp文件:

#include "EntityComponent.h" 
#include <string> 

psycho2d::EntityComponent::EntityComponent(const std::string &name){ 
    this->m_name = name; 
} 

psycho2d::EntityComponent::~EntityComponent(){} 

inline const std::string& psycho2d::EntityComponent::getName() const{ 
    return this->m_name; 
} 

这些两个文件是框架的一部分(我在Mac上工作)。他们编译得很好。 问题是当我编写使用库的可执行文件时。 我已经创建了一个EntityComponent的子类,并编译。但是,如果我调用getName()函数,链接器告诉我:

"psycho2d::EntityComponent::getName() const", referenced from: 
_main in main.o 
Symbol(s) not found 
Collect2: ld returned 1 exit status 

我能做什么? 谢谢。

+0

你是否实现了所有的抽象虚拟方法您在界面中指定? – 2010-12-08 19:05:42

+1

如果包含编译/链接命令,可能会有所帮助。 – 2010-12-08 19:06:14

回答

3

如果要从多个.cpp文件引用它,请将头文件中的内联函数代码。

参考here

+0

它的工作,谢谢;) – Sigel 2010-12-09 09:49:56

0

你(略作修改,包括一个子类文本)的代码编译我的机器罚款(在Mac了。GCC 4.2.1)

尝试删除所有的.o-文件,并用干净的目录编制。如果这也失败了,我会尝试删除内联定义。

0

尝试从您的实施中删除inline限定符。

2

外部链接inline函数必须在使用它的每个翻译单元中定义(实际上相同)。

因此要么从定义中删除inline,要么将定义放在头文件中。

干杯&心连心,