Visual studio 在C+中使用shared_ptr和unique_ptr生成多态对象的向量有困难+;Visual studio 2019 Cmake项目
对于一个练习,我需要构建多态对象的向量,由于某种原因,共享和唯一ptr在使用它们时都会出现链接错误2019和1120。我没有选择使用旧的内存分配方式来分配New和Delete,所以我必须让它工作。我尝试了各种不同的语法选项来实现这一点,但仍然没有成功 *注: 我们在visual studio中使用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 &
我们还将对象拆分为头文件和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文件中。现在,一切都按我所希望的那样运行。