다형성 및 순수 가상 함수에 문제가 있습니다. 내 메인 클래스순수 가상 함수 및 상속
#include<memory>
class Shape
{
public:
Gdiplus::Point start;
Gdiplus::Point end;
std::shared_ptr<Gdiplus::Pen> m_pen;
virtual void Draw(Gdiplus::Graphics & m_GraphicsImage) = 0;
void setPen(std::shared_ptr<Gdiplus::Pen> pen2);
void setStart(int xPos, int yPos);
void setEnd(int xCor, int yCor);
};
그렇다면이 클래스는 Shape에서 파생되었습니다. Line.h
#pragma once
#include<memory>
class Line: public Shape
{
public:
void Draw(Gdiplus::Graphics & m_GraphicsImage);
}
이것은 내 line.cpp입니다. 내 주에
#include "stdafx.h"
#include "Line.h"
#include "ShapeMaker.h"
void Line::Draw(Gdiplus::Graphics & m_GraphicsImage)
{
m_GraphicsImage.DrawLine(m_pen.get(),start.X,start.Y,end.X,end.Y);
}
내가 다형성을 이유로 형 모양의 공유 포인터를 선언
std::shared_ptr<Shape> m_shape;
다음 시도하고 Line.cpp에 대한 함수를 호출하지만이 작동하지 않습니다,
LRESULT CDrawView::OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
int xPos= GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
start.X = xPos;
start.Y = yPos;
//Line line;
auto line = std::make_shared<Shape> (m_shape);
std::shared_ptr<Gdiplus::Pen> myPen(pen.Clone());
line->setPen(myPen);
line->setStart(xPos,yPos);
return 0;
}
LRESULT CDrawView::OnLButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
int xPos= GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
end.X = xPos;
end.Y = yPos;
//Pen pen(Color(0, 0, 255));
//Line line;
auto line = std::make_shared<Shape> (m_shape);
line->setEnd(xPos,yPos);
line->Draw(m_GraphicsImage);
m_shape.reset();
RedrawWindow();
return 0;
} 이제 drawview.cpp (54)가 표시됩니다. C2371 오류 : 'line': 재정의; 다른 기본 유형 1> \ \ drawview.cpp (53) 그릴 : '라인'의 선언을 참조
이
나는 명칭을 명명'멤버-variable'를 사용하여 기능 * 매개 변수 이름 *을 사용하여 지금 당신을 경고하는 것'm_xxxxx'는 shared_ptr의 사이에 주조의 올바른 사용을 위해이 http://www.cplusplus.com/reference/memory/dynamic_pointer_cast/
에
참조 마이크로 소프트 중심의 코딩 관행 ** 미친 **을 다루는 데 익숙한 사람을 운전할 것입니다. 그 새를 죽여라. ** 지금 **. – WhozCraig