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

error LNK2001: unresolved external symbol -- I can't get a SIMPLE INHERITANCE to work in C++

本文关键字:继承 简单 工作 C++ LNK2001 外部 错误 符号      更新时间:2023-10-16

我很难使用继承。我正在学习计算机科学,必须解决这个问题。。。Rihgt现在我正在尝试创建我自己的类"Copy",该类包含对"Drawable"对象的引用,例如,我有一个类为"circle"的对象,它继承自"Drawable"。我想复制所说的对象"圆",这似乎还可以。但当我想调用"绘制"方法时,情况会变糟。

错误消息:

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)  

**这是我的主要:**

#include <SFMLGraphics>
#include "circle.hpp"
#include "copy.hpp"

int main(){
    sf::RenderWindow window{ sf::VideoMode{ 640, 480 }, "SFML window" };
    circle blauwe_circle{ 40.0F, sf::Color::Blue };
    circle rode_circle{ 10.F, sf::Color::Red };
    copy cBlauw{ sf::Vector2f{ 40.f, 40.f }, blauwe_circle };
    copy cRoodA{ sf::Vector2f{ 50.f, 50.f }, rode_circle };
    sf::Vector2f nul{ 0.f, 0.f };

    while (window.isOpen()){
        sf::Event event;
        while (window.pollEvent(event)){
            if (event.type == sf::Event::Closed) window.close();
        }
        sf::sleep(sf::milliseconds(20));
    }
    return 0;
}`

可提取.hpp

class Drawable
{
    public:
        virtual void draw(sf::RenderWindow & window, sf::Vector2f vector);
};

Circle.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;
};

cirlce.cpp

#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);
}

复制.hpp:

#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

#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;
};