2013-03-27 219 views
1

我試圖創建一個設置函數,它將採用共享指針並將其設置爲等於另一個共享指針。C++共享指針問題

這是共享指針和我有我的頭文件中聲明所設定的功能

class Shape 
{ 
public: 
    Shape(); 
    Gdiplus::Point start; 
    Gdiplus::Point end; 

    std::shared_ptr<Gdiplus::Pen> m_pen; 

    virtual LRESULT 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); 
}; 

,但是當我試圖實現它在我的cpp我得到一個錯誤,說我的「的聲明是不兼容在.h上聲明的void setPen「。它也表示m_pen在我的cpp文件中是未經驗證的。

#include<memory> 
#include "stdafx.h" 
#include "resource.h" 

    #include "ShapeMaker.h" 
void Shape::setPen(std::shared_ptr<Gdiplus::Pen> pen2) 
{ 
    m_pen = pen2; 
} 

void Shape::setStart(int xPos, int yPos) 
{ 
    start.X = xPos; 
    start.Y = yPos; 
} 


void Shape::setEnd(int xCor, int yCor) 
{ 
    end.X= xCor; 
    end.Y = yCor; 
} 

這就是我所有的。該stdax.h包括

#include <atlwin.h> 

    #include <atlframe.h> 
    #include <atlctrls.h> 
    #include <atldlgs.h> 
    #include <atlctrlw.h> 
    #include <atlscrl.h> 

    #include <GdiPlus.h> 

錯誤,我得到:

shapemaker.h(11): error C2039: 'shared_ptr' : is not a member of 'std' 

shapemaker.h(11): error C2143: syntax error : missing ';' before '<' 

shapemaker.h(11): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 

shapemaker.h(11): error C2238: unexpected token(s) preceding ';' 
.h(16): error C2039: 'shared_ptr' : is not a member of 'std' 

shapemaker.h(16): error C2061: syntax error : identifier 'shared_ptr' 
shapemaker.cpp(9): error C2511: 'void Shape::setPen(std::tr1::shared_ptr<_Ty>)' : overloaded member function not found in 'Shape' 
+2

你能展示這個實現嗎? – 2013-03-27 01:50:25

+1

實際上看到它正在抱怨的行是很方便的,以便我們可以將它與聲明進行比較。 – chris 2013-03-27 01:50:26

+0

那裏它去的傢伙。對不起,那 – user1665569 2013-03-27 01:52:38

回答

2

我從任何遊客評論張貼我的答案。

問題出在cpp文件的開頭。

#include<memory> 
#include "stdafx.h" 
#include "resource.h" 

    #include "ShapeMaker.h" 

MSVC++要求的預編譯頭"stdafx.h"在源文件中先於任何其他代碼。

必須刪除#include<memory>,而是將其放置在首先需要的"ShapeMaker.h"