0

我從Julian Templeman的書「Microsoft Visual C++ .NET」2005版中學習Visual C++。我使用的是Visual Studio Express 2012.C++ C2681重載函數,dynamic_cast

我知道它處理的是由C++/CLI取代的舊託管C++,因此我必須更改代碼中的某些文本才能在cli中工作。

然而,或當要重新打印窗口內容的代碼時,窗口得到最小化後,我得到錯誤

C2681:「重載函數」:對dynamic_cast的

這裏無效的表達式類型的功能它拋出:

void Form_Paint(Object^ pSender, PaintEventArgs^ pe) 
{ 
    Graphics^ gr = pe->Graphics; 
    Pen^ pen1 = gcnew Pen(Color::Black); 

    for(int i=0; i<list->Count; i++) 
    { 
     Line^ pline = dynamic_cast<Line^>(pline->GetType); //C2681 
     gr->DrawLine(pen1, pline->p1.X,pline->p1.Y,pline->p2.X,pline->p2.Y); 
    } 
} 

從本書最初看起來像這樣:

void Form_Paint(Object* pSender, PaintEventArgs* pe) 
{ 
    Graphics* gr = pe->Graphics; 
    Pen* pen1 = new Pen(Color::Black); 

    for(int i=0; i<list->Count; i++) 
    { 
     Line* pline = dynamic_cast<Line*>(pline->get_Item(i)); 
     gr->DrawLine(pen1, pline->p1.X,pline->p1.Y,pline->p2.X,pline->p2.Y); 
    } 
} 

另外我不知道如何在CLI中編寫pline->get_Item(i)

回答

0

我認爲pline->GetType應該是pline->GetType(),因爲GetType()是一個函數。

+0

如果我把()放到它結束它編譯,但不重繪窗體的內容,如果我把(i)結束,它會拋出錯誤C2660:'System :: Object :: GetType'函數不需要1參數 – Lauri