私が抱えている問題は、作成したクラスのコンストラクターを呼び出すと、次のエラーが発生することです。
main.cpp:20: 「StaticObject::StaticObject(Graphics*, sf::String,
sf::Vector2)」への未定義の参照
この問題は、main.cpp に .cpp ファイルのインクルードを追加することで「修正」できます。
...
#include "GameObjects/StaticObject.cpp"
...
これで問題は解決しますが、これは不十分な解決策のように思われ、以前に言われたことに反します。この問題を解決する他の方法はありますか? このプログラムをコーディング/コンパイルするために、g ++でNetbeans 7.3を使用しています。以下は関連するコードです。
main.cpp
...
#include <SFML/Graphics.hpp>
#include "Graphics/Graphics.hpp"
#include "GameObjects/StaticObject.hpp"
int main(int argc, char** argv) {
//SETUP
Graphics graphics;
background = new StaticObject(&graphics, "Data/Images/BackgroundPlaceholder.png", sf::Vector2f(0,0));
...
main.hpp
...
#include <SFML/Graphics.hpp>
#include "GameObjects/StaticObject.hpp"
...
// Objects
StaticObject *background;
...
StaticObject.hpp
#include <SFML/Graphics.hpp>
#include "../Graphics/Graphics.hpp"
class StaticObject{
public:
StaticObject();
StaticObject(Graphics *_graphics, sf::String texture_filename, sf::Vector2f _position);
StaticObject(const StaticObject& orig);
virtual ~StaticObject();
private:
// The sprite stores the position
sf::Sprite *sprite;
sf::Texture *texture;
};
StaticObject.cpp
#include "StaticObject.hpp"
#include <SFML/Graphics.hpp>
#include "../Graphics/Graphics.hpp"
StaticObject::StaticObject(){
}
StaticObject::StaticObject(Graphics *_graphics, sf::String texture_filename, sf::Vector2f _position) {
sprite = _graphics->AddSprite(texture_filename);
sprite->setPosition(_position);
}
StaticObject::StaticObject(const StaticObject& orig) {
}
StaticObject::~StaticObject() {
}
次の行を main.cpp に追加すると、エラーは消えます。
#include "GameObject/StaticObject.cpp"
誰でも説明してもらえますか:
なぜこれで問題が解決するのですか?
.hpp ファイルをインクルードすることで、.cpp が暗黙的にインクルードされなかったのはなぜですか?
これを行うより良い方法はありますか?