Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误LNK2001:未解析的外部符号--我可以';在C+中,无法获得简单的继承+;_C++_Inheritance_Lnk2001 - Fatal编程技术网

C++ 错误LNK2001:未解析的外部符号--我可以';在C+中,无法获得简单的继承+;

C++ 错误LNK2001:未解析的外部符号--我可以';在C+中,无法获得简单的继承+;,c++,inheritance,lnk2001,C++,Inheritance,Lnk2001,我正在努力使用继承。我正在学习计算机科学,必须解决它。。。 Rihgt现在我正在尝试创建我自己的类“Copy”,其中包含对“Drawable”对象的引用, 例如,我有一个类“circle”的对象,它继承自“Drawable”。我想复制一份上面提到的物体“圆”,看起来效果不错。但是,当我想调用“draw”方法时,事情就变糟了 错误消息: 1>------ Build started: Project: Project2, Configuration: Debug Win32 ------

我正在努力使用继承。我正在学习计算机科学,必须解决它。。。 Rihgt现在我正在尝试创建我自己的类“Copy”,其中包含对“Drawable”对象的引用, 例如,我有一个类“circle”的对象,它继承自“Drawable”。我想复制一份上面提到的物体“圆”,看起来效果不错。但是,当我想调用“draw”方法时,事情就变糟了

错误消息:

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!我把它添加到我的代码中,现在它工作得完美无缺^^