Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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
Visual studio 在C+中使用shared_ptr和unique_ptr生成多态对象的向量有困难+;Visual studio 2019 Cmake项目_Visual Studio_Vector_Polymorphism_Shared Ptr_Unique Ptr - Fatal编程技术网

Visual studio 在C+中使用shared_ptr和unique_ptr生成多态对象的向量有困难+;Visual studio 2019 Cmake项目

Visual studio 在C+中使用shared_ptr和unique_ptr生成多态对象的向量有困难+;Visual studio 2019 Cmake项目,visual-studio,vector,polymorphism,shared-ptr,unique-ptr,Visual Studio,Vector,Polymorphism,Shared Ptr,Unique Ptr,对于一个练习,我需要构建多态对象的向量,由于某种原因,共享和唯一ptr在使用它们时都会出现链接错误2019和1120。我没有选择使用旧的内存分配方式来分配New和Delete,所以我必须让它工作。我尝试了各种不同的语法选项来实现这一点,但仍然没有成功 *注: 我们在visual studio中使用Cmake将项目绑定在一起 我们还将对象拆分为头文件和cpp文件 以下是我目前的目标: //This is the abstract base class #pragma once #include &

对于一个练习,我需要构建多态对象的向量,由于某种原因,共享和唯一ptr在使用它们时都会出现链接错误2019和1120。我没有选择使用旧的内存分配方式来分配New和Delete,所以我必须让它工作。我尝试了各种不同的语法选项来实现这一点,但仍然没有成功

*注: 我们在visual studio中使用Cmake将项目绑定在一起
我们还将对象拆分为头文件和cpp文件

以下是我目前的目标:

//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:

};
Cpp文件:

#pragma once
#include "Circle.h"

Circle::Circle()
    : m_name("Circle")
{
}

Circle::~Circle()
{
}

std::string Circle::get_name() override
{
    return m_name;
}
#pragma once

#include "Rectangle.h"

Rectangle::Rectangle()
    : m_name ("Rectangle")
{
}

Rectangle::~Rectangle()
{
}

std::string Rectangle::get_name() override
{
    return m_name;
}
#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 "Shape.h"

class Rectangle : public Shape
{
public:
    Rectangle();
    ~Rectangle();
    virtual std::string get_name() override;

private:
    std::string m_name;
};
Cpp文件:

#pragma once
#include "Circle.h"

Circle::Circle()
    : m_name("Circle")
{
}

Circle::~Circle()
{
}

std::string Circle::get_name() override
{
    return m_name;
}
#pragma once

#include "Rectangle.h"

Rectangle::Rectangle()
    : m_name ("Rectangle")
{
}

Rectangle::~Rectangle()
{
}

std::string Rectangle::get_name() override
{
    return m_name;
}
#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 <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;

};

如果您能向我解释这里出了什么问题,我衷心感谢您。问题出在Cmake文件中。现在一切都正常工作了。

问题出在Cmake文件中。现在,一切都按我所希望的那样运行。