Для упражнения мне нужно построить вектор из полиморфных c объектов, и по какой-то причине совместно используемые и уникальные ptr допускают ошибки связи 2019 и 1120, когда я их использую. У меня нет возможности использовать старый способ выделения памяти с New и Delete, поэтому я должен заставить его работать. я попробовал различные варианты синтаксиса для этого, но все же безуспешно.
* примечание: мы используем Cmake для связывания проекта в Visual Studio
, а также разбиваем объекты на заголовок и cpp files.
сейчас мои объекты:
//This is the abstract base class
#pragma once
#include <string>
class Shape
{
public:
Shape() = default;
virtual ~Shape() = default;
virtual std::string get_name() = 0;
private:
};
Это производные классы:
#pragma once
#include "Shape.h"
class Circle : public Shape
{
public:
Circle();
~Circle();
virtual std::string get_name() override;
private:
std::string m_name;
};
Cpp file:
#pragma once
#include "Circle.h"
Circle::Circle()
: m_name("Circle")
{
}
Circle::~Circle()
{
}
std::string Circle::get_name() override
{
return m_name;
}
другой производный класс:
#pragma once
#include "Shape.h"
class Rectangle : public Shape
{
public:
Rectangle();
~Rectangle();
virtual std::string get_name() override;
private:
std::string m_name;
};
Cpp file:
#pragma once
#include "Rectangle.h"
Rectangle::Rectangle()
: m_name ("Rectangle")
{
}
Rectangle::~Rectangle()
{
}
std::string Rectangle::get_name() override
{
return m_name;
}
Это класс, управляющий программой:
#pragma once
#include <iostream>
#include <string>
#include <vector>
#include <memory>
#include "Shape.h"
#include "Circle.h"
#include "Rectangle.h"
class Board
{
public:
Board();
~Board();
void run();
void objects_allocation();
private:
std::string m_string;
std::vector<std::shared_ptr<Shape>> m_gates;
};
Cpp файл:
#pragma once
#include "Board.h"
Board::Board()
: m_string(" ")
{
}
Board::~Board()
{
}
void run()
{
while (m_string != "exit")
{
std::cin >> m_string;
}
std::cout << "Goodbye!" << std::endl;
}
void Board::Objects_allocation()
{
m_gates.push_back(std::make_shared <Circle>());
m_gates.push_back(std::make_shared <Rectangle>());
}
и вот моя основная функция:
#pragma once
#include "Board.h"
int main()
{
Board board1;
board1.run();
return 0;
}
искренне благодарю вас, если вы можете объяснить мне, что здесь пошло не так ..