【问题标题】:C++ C2681 overloaded function, dynamic_castC++ C2681 重载函数,dynamic_cast
【发布时间】:2013-07-27 18:42:35
【问题描述】:

我从 Julian Templeman 的书“Microsoft Visual C++ .NET”,2005 年版中学习 Visual C++。我正在使用 Visual Studio Express 2012。

我知道它处理被 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-&gt;get_Item(i)

【问题讨论】:

    标签: c++ visual-c++ command-line-interface managed-c++ dynamic-cast


    【解决方案1】:

    我假设pline-&gt;GetType 应该是pline-&gt;GetType(),因为GetType() 是一个函数。

    【讨论】:

    • 如果我将 () 放入结尾,它会编译,但不会重绘表单的内容,如果我放入结尾 (i),则会引发错误 C2660: 'System::Object::GetType'函数不接受 1 个参数
    猜你喜欢
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2014-05-30
    相关资源
    最近更新 更多