Символ не найден, связывающий библиотеку - PullRequest
1 голос
/ 08 декабря 2010

Я пишу простой игровой движок, и у меня есть файл 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

Что я могу сделать? Благодаря.

Ответы [ 4 ]

3 голосов
/ 08 декабря 2010

Поместите код для встроенной функции в заголовочный файл, если вы хотите сослаться на него из нескольких файлов .cpp.

Ссылка здесь .

2 голосов
/ 08 декабря 2010

Функция внешней связи inline должна быть определена (как и прежде) в каждой единице перевода, где она используется.

Поэтому удалите inline из определения или поместите определение в заголовочный файл.

Приветствия и hth.,

0 голосов
/ 08 декабря 2010

Попробуйте удалить квалификатор inline из вашей реализации.

0 голосов
/ 08 декабря 2010

Ваш (слегка измененный, чтобы включить подкласс в текст) код прекрасно компилируется на моем компьютере (также Mac. GCC 4.2.1)

Попробуйте удалить все .o-файлы и скомпилируйте их с чистой папкой,Если это тоже не удастся, я постараюсь удалить определение inline.

...