2014-05-13 2 views
0

나는 펜, 색상 컬렉션 및 도면을 관리 할 수있는 클래스를 가지고비주얼 스튜디오 오류 C2664은

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;*/ 
    } 
} 

을 그리고 여기에 비주얼 스튜디오 출력 저를 컴파일 할 때 무엇을 : 그래서 여기가 내가 쓴 것입니다,

오늘은 새로운 클래스를 작성했다, 나는 두 번째 방법을 사용했다

오류 메시지의
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 

나는 어 있기 때문에, 조금 혼란 스러워요 Visual Studio 자동 완성 기능을 사용하여 모든 오버로드 된 메서드를 보여줍니다.

내가 뭘 잘못했는지 모르겠다.

도움 주셔서 감사합니다.

+0

모든 임시 파일을 삭제 시도하고 다시 시작 VS – sp2danny

+1

을 나는 비주얼 스튜디오를 폐쇄, 빌드 폴더,이 파일 삭제 : project.sdf과 ipch 폴더에 있습니다. 그런 다음 VS를 다시 시작하고 관련 파일을 작성하십시오. 작동하지 않습니다. 그리고 나서 전체 프로젝트를 재구성 해 봅니다. 실패한 것은 ... – AMDG

+0

Plz는 영어로 관련 텍스트를 게시합니다. – Rakib

답변

0

좋아, 문제를 해결합니다. 내가 대답을 게시하면 도움이 될 수 있습니다.

문제는 마지막 매개 변수에있었습니다. VS 컴파일러는 Gdiplus::DashStyle (열거 형)으로 변환 할 수 없으므로 오류를보고합니다. 그러나 올바른 오류는 아닙니다.

마지막 값을 Gdiplus::DashStyle으로 변환하면됩니다. Gdiplus::DashStyle


더 많은 정보 : http://msdn.microsoft.com/en-us/library/ms534104%28v=vs.85%29.aspx