我遇到的问题是,当我为我创建的类调用构造函数时,出现以下错误。
main.cpp:20: 未定义引用`StaticObject::StaticObject(Graphics*, sf::String,
sf::Vector2)'
这个问题可以“修复”,像这样在 main.cpp 中为 .cpp 文件添加一个包含。
...
#include "GameObjects/StaticObject.cpp"
...
虽然这解决了问题,但这似乎是一个糟糕的解决方案,并且与我之前被告知的内容背道而驰。有没有其他方法可以解决这个问题?我正在使用带有 g++ 的 Netbeans 7.3 来编码/编译这个程序。下面是相关代码。
主文件
...
#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));
...
主文件
...
#include <SFML/Graphics.hpp>
#include "GameObjects/StaticObject.hpp"
...
// Objects
StaticObject *background;
...
静态对象.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;
};
静态对象.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"
谁能解释一下:
为什么这可以解决问题?
为什么 .cpp 没有通过包含 .hpp 文件来隐式包含?
有没有更好的方法来做到这一点?