C++ 使用重载方法时出现Visual Studio错误C2664
我有一个课程来管理笔、颜色集合和绘图:NRGraphics: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); ... } 这些是唯一
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。所以你应该检查你的参数。它们的顺序正确吗?