Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用重载方法时出现Visual Studio错误C2664_C++_Visual Studio 2010_Gdi+_Overloading - Fatal编程技术网

C++ 使用重载方法时出现Visual Studio错误C2664

C++ 使用重载方法时出现Visual Studio错误C2664,c++,visual-studio-2010,gdi+,overloading,C++,Visual Studio 2010,Gdi+,Overloading,我有一个课程来管理笔、颜色集合和绘图:NRGraphics: class NRGraphics { ... void newPen(std::string name, float epaisseur, Color couleur, DashStyle style); void newPen(std::string name, float epaisseur, std::string colorName, DashStyle style); ... } 这些是唯一

我有一个课程来管理笔、颜色集合和绘图:NRGraphics:

class NRGraphics
{
    ...
    void newPen(std::string name, float epaisseur, Color couleur, DashStyle style);
    void newPen(std::string name, float epaisseur, std::string colorName, DashStyle style);
    ...
}
这些是唯一具有该名称的方法。 我在一些函数中使用了第二个

今天我写了一个新的类,我不得不使用第二种方法,所以这里是我写的:

void NRCell::draw(NRGraphics * drawer)
{
    switch(backgroundStyle)
    {
        case Solid:
            std::string colorName;
            std::string borderPen;
            std::string borderColorName = "pas de couleur";

            try
            {
                colorName = drawer->findColor(color->Red(), color->Green(), color->Blue(), color->Alpha());
            }
            catch(std::exception e)
            {
                colorName  = "R";
                colorName += color->Red();
                colorName += "G";
                colorName += color->Green();
                colorName += "B";
                colorName += color->Blue();
                colorName += "A";
                colorName += color->Alpha();

                drawer->newColor(colorName, color->Red(), color->Green(), color->Blue(), color->Alpha());
            }

            try
            {
                borderColorName = drawer->findColor(
                borderColor->Red(),
                borderColor->Green(),
                borderColor->Blue(),
                borderColor->Alpha());

                borderPen = drawer->findPen(borderColorName, borderSize);
            }
            catch(std::exception e)
            {
                if(borderColorName == "pas de couleur")
                {
                borderColorName  = "R";
                borderColorName += borderColor->Red();
                borderColorName += "G";
                borderColorName += borderColor->Green();
                borderColorName += "B";
                borderColorName += borderColor->Blue();
                borderColorName += "A";
                borderColorName += borderColor->Alpha();

                drawer->newColor(
                  borderColorName,
                  borderColor->Red(),
                  borderColor->Green(),
                  borderColor->Blue(),
                  borderColor->Alpha());
                }

                borderPen  = "Pen_color_";
                borderPen += borderColorName;
                borderPen += "_size_";
                borderPen += borderSize;
                drawer->newPen(borderPen, (float)borderSize, borderColorName, 0);
            }

            drawer->DrawFilledSolidRectangle(
                rect->getPt1()->X(), rect->getPt1()->Y(),
                rect->getPt2()->X(), rect->getPt2()->Y(),
                colorName,
                borderPen,
                borderSize
            );
        break;

    /*case GradientHorizontal:
    break;

    case GradientVertical:
    break;*/
    }
}
下面是Visual Studio在编译时输出的内容:

1>c:\users\md2i\desktop\current\branch\devel\sources\nrgraphicscomponents.cpp(90): error C2664: 'void NRGraphics::newPen(std::string,float,Gdiplus::Color,Gdiplus::DashStyle)' : impossible de convertir le paramètre 3 de 'std::string' en 'Gdiplus::Color'
1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
错误消息的自动英文翻译:

1>c:\users\md2i\desktop\current\branch\devel\sources\nrgraphicscomponents.cpp(90): error C2664: 'void NRGraphics::newPen(std::string,float,Gdiplus::Color,Gdiplus::DashStyle)' : can not convert parameter 3 from 'std::string' to 'Gdiplus::Color'
1>          No conversion operator defined by the user available that can perform this conversion, or the operator can not be called
我有点困惑,因为当我使用VisualStudioAutoCompletion时,它会显示所有重载的方法

我不知道我做错了什么


谢谢你的帮助

好的,我解决了我的问题。我发布了答案,这可能会有所帮助

问题出在最后一个参数上。VS编译器无法将其转换为Gdiplus::DashStyle(枚举),因此它会报告错误。但这不是正确的错误

因此,我只需将最后一个值转换为Gdiplus::DashStyle,它就可以工作了


有关Gdiplus::DashStyle的详细信息:

尝试清除所有临时文件并重新启动VSI closed Visual Studio,删除生成文件夹、此文件:project.sdf和ipch文件夹。然后重新启动VS,尝试构建相关文件:这不起作用;然后我尝试重建整个项目,但也失败了…请用英语发布相关文本。完成后,我只使用谷歌翻译。错误是无法将std::string转换为gdiplus::color。所以你应该检查你的参数。它们的顺序正确吗?