Я изо всех сил стараюсь использовать наследование. Я изучаю информатику и должен ее решить ... Rihgt теперь я пытаюсь создать свой собственный класс «Копировать», который содержит ссылку на объект «Drawable», Например, у меня есть объект класса «круг», который наследуется от «Drawable». Я хочу сделать копию упомянутого объекта «круг», который, похоже, работает нормально. Но когда я хочу вызвать метод «рисования», все становится кислым.ошибка LNK2001: нерешенный внешний символ - я не могу заставить ПРОСТОЕ НАСЛЕДИЕ работать в C++
Сообщение об ошибке:
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>)" ([email protected]@@[email protected]@@[email protected]@[email protected]@Z)
1>copy.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Drawable::draw(class sf::RenderWindow &,class sf::Vector2<float>)" ([email protected]@@[email protected]@@[email protected]@[email protected]@Z)
** Это мое главное: **
#include <SFML\Graphics>
#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;
}`
drawable.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);
}
copy.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;
};
copy.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', метод не имеет реализации (или его нету показано) – Borgleader
Убедитесь, что вы показать * точное * сообщение об ошибке. Как еще мы должны знать, что нерешено? – crashmstr
Сообщение об ошибке заключается в том, что компилятор не может найти реализацию для 'Drawable :: draw'. Как отметил Borgleader, код, который вы опубликовали, не включает реализацию для «Drawable :: draw», которая предполагает, что это ваша проблема. Поскольку AlexD уже сказал в ответе, если вы не хотите реализации для Drawable :: draw, вам нужно пометить метод pure virtual. –