我遇到的問題是,當我爲創建的類調用構造函數時,出現以下錯誤。對類構造函數的未定義引用,包括.cpp文件修復程序
main.cpp中:20:未定義參照 '
這個問題可以' 固定 `StaticObject :: StaticObject(圖形*,SF ::字符串,
SF :: Vector2) '在main.cpp中爲.cpp文件添加一個include就像這樣。
...
#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 文件而隱式包含?
有沒有更好的方法來做到這一點?
是包含在您的項目中的GameObject/StaticObject.cpp?看起來不像是從錯誤 – bizzehdee 2013-03-22 20:21:49
'你在項目中'是什麼意思?如上所述,使用#include似乎可以解決問題,但必須有更好的方法。謝謝你的方式:) – OMGtechy 2013-03-22 20:24:22
不要包含cpp,編譯它並鏈接到目標文件。 – chris 2013-03-22 20:24:24