C++ 错误LNK2001:未解析的外部符号--我可以';在C+中,无法获得简单的继承+;
我正在努力使用继承。我正在学习计算机科学,必须解决它。。。 Rihgt现在我正在尝试创建我自己的类“Copy”,其中包含对“Drawable”对象的引用, 例如,我有一个类“circle”的对象,它继承自“Drawable”。我想复制一份上面提到的物体“圆”,看起来效果不错。但是,当我想调用“draw”方法时,事情就变糟了 错误消息:C++ 错误LNK2001:未解析的外部符号--我可以';在C+中,无法获得简单的继承+;,c++,inheritance,lnk2001,C++,Inheritance,Lnk2001,我正在努力使用继承。我正在学习计算机科学,必须解决它。。。 Rihgt现在我正在尝试创建我自己的类“Copy”,其中包含对“Drawable”对象的引用, 例如,我有一个类“circle”的对象,它继承自“Drawable”。我想复制一份上面提到的物体“圆”,看起来效果不错。但是,当我想调用“draw”方法时,事情就变糟了 错误消息: 1>------ Build started: Project: Project2, Configuration: Debug Win32 ------
1>------ Build started: Project: Project2, Configuration: Debug Win32 ------
1> main.cpp
1> Drawable.cpp
1> copy.cpp
1> Cirkel.cpp
1> Generating Code...
1>Cirkel.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Drawable::draw(class sf::RenderWindow &,class sf::Vector2<float>)" (?draw@Drawable@@UAEXAAVRenderWindow@sf@@V?$Vector2@M@3@@Z)
1>copy.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Drawable::draw(class sf::RenderWindow &,class sf::Vector2<float>)" (?draw@Drawable@@UAEXAAVRenderWindow@sf@@V?$Vector2@M@3@@Z)
圆圈。hpp:
#include "Drawable.hpp"
class circle : public Drawable{
public:
circle(float size = 30, sf::Color color = sf::Color::Red);
void draw(sf::RenderWindow & window, sf::Vector2f position) override;
private:
float size;
sf::Color color;
sf::CircleShape c;
};
#include "Drawable.hpp"
class copy: public Drawable
{
public:
copy(sf::Vector2f position, Drawable & c);
void draw(sf::RenderWindow & window, sf::Vector2f vector) override;
private:
sf::Vector2f position;
Drawable & c;
};
cirlce.cpp
class Drawable
{
public:
virtual void draw(sf::RenderWindow & window, sf::Vector2f vector);
};
#include "circle.hpp"
#include "Drawable.hpp"
circle::circle(float fSize, sf::Color color) :
size{ fSize },
color{ color }
{
c.setRadius(size);
c.setPointCount(30U);
c.setFillColor(color);
}
void circle::draw(sf::RenderWindow & window, sf::Vector2f position){
c.setPosition(position);
window.draw(c);
}
#include "copy.hpp"
#include "Drawable.hpp"
copy::copy(sf::Vector2f vPosition, Drawable & c) :
position{ vPosition },
c{ c }
{}
void copy::draw(sf::RenderWindow & window, sf::Vector2f v){
c.draw(window, v);
}
复制.hpp:
#include "Drawable.hpp"
class circle : public Drawable{
public:
circle(float size = 30, sf::Color color = sf::Color::Red);
void draw(sf::RenderWindow & window, sf::Vector2f position) override;
private:
float size;
sf::Color color;
sf::CircleShape c;
};
#include "Drawable.hpp"
class copy: public Drawable
{
public:
copy(sf::Vector2f position, Drawable & c);
void draw(sf::RenderWindow & window, sf::Vector2f vector) override;
private:
sf::Vector2f position;
Drawable & c;
};
复制.cpp
class Drawable
{
public:
virtual void draw(sf::RenderWindow & window, sf::Vector2f vector);
};
#include "circle.hpp"
#include "Drawable.hpp"
circle::circle(float fSize, sf::Color color) :
size{ fSize },
color{ color }
{
c.setRadius(size);
c.setPointCount(30U);
c.setFillColor(color);
}
void circle::draw(sf::RenderWindow & window, sf::Vector2f position){
c.setPosition(position);
window.draw(c);
}
#include "copy.hpp"
#include "Drawable.hpp"
copy::copy(sf::Vector2f vPosition, Drawable & c) :
position{ vPosition },
c{ c }
{}
void copy::draw(sf::RenderWindow & window, sf::Vector2f v){
c.draw(window, v);
}
如果
Drawable::draw
是一个纯虚拟函数,没有实现,则添加=0
:
class Drawable
{
public:
virtual void draw(sf::RenderWindow & window, sf::Vector2f vector) = 0;
};
Drawable::draw
,方法没有实现(或者您没有显示它),请确保显示准确的错误消息。否则我们怎么知道什么是未解决的呢?错误消息是编译器找不到Drawable::draw
的实现。正如Borgeader所指出的,您发布的代码没有包含Drawable::draw
的实现,这表明这是您的问题所在。正如AlexD在回答中所说的,如果您不想实现Drawable::draw
,您需要将该方法标记为纯虚拟。非常感谢AlexD!我把它添加到我的代码中,现在它工作得完美无缺^^