我遇到的问题是,当我调用构造函数为我创建了一个类,我得到了下面的错误。
main.cpp中:20:未定义的引用`StaticObject :: StaticObject(图形*,SF ::字符串,
SF :: Vector2)”
这个问题可以“固定”加入包括用于像这样在main.cpp中.cpp文件。
...
#include "GameObjects/StaticObject.cpp"
...
虽然这解决了这个问题,这似乎是一个贫穷的解决方案,违背了我先前已经告诉。 是否有任何其他的方式来解决这个问题呢? 我使用NetBeans 7.3 G ++代码/编译这个程序。 下面是相关的代码。
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"
任何人都可以请解释:
为什么这能解决问题?
为什么在.cpp不是隐含通过包括.HPP文件包括在内?
是否有这样做的更好的办法?