возникают трудности при создании вектора объектов polymorphi c с использованием shared_ptr и unique_ptr в C ++ Visual Studio 2019 Cmake project - PullRequest
1 голос
/ 12 апреля 2020

Для упражнения мне нужно построить вектор из полиморфных 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;
}

искренне благодарю вас, если вы можете объяснить мне, что здесь пошло не так ..

1 Ответ

0 голосов
/ 13 апреля 2020

Проблема была в файле Cmake. теперь все работает так, как я хотел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...