为什么这些论点不合法?

时间:2012-09-06 17:45:29

标签: visual-c++ mfc

//Block.h
#pragma once
class Block
{
 public:
    CRect pos;
    int num;

 public:
    Block(void);
   ~Block(void);
};

  //view class
  public:
  Block currentState[5];       // stores the current state of the blocks 

 void CpuzzleView::OnDraw(CDC* pDC)
{

 CpuzzleDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 if (!pDoc)
    return;

//draw the 4 blocks and put text into them
for(int i=0;i<4;i++)
{
    pDC->Rectangle(currentState[i].pos);
            // i'm getting an error for this line:
    pDC->TextOut(currentState[i].pos.CenterPoint(), currentState[i].num);    
}


    pDC->TextOut(currentState[i].pos.CenterPoint(), currentState[i].num); 

错误表示没有重载函数CDC :: TextOutW()的实例与参数列表匹配。但该功能的原型是:

     CDC::TextOutW(int x, int y, const CString &str )

我所做的全部是,我直接给出了CenterPoint()返回的点对象而不是2点......不应该有效吗?

1 个答案:

答案 0 :(得分:0)

那是因为你没有正确提供参数列表。请仔细阅读编译器错误消息,这通常有助于解决问题。

TextOut(currentState[i].pos.CenterPoint(), currentState[i].num);

在此次通话中,您传递了CPoint个对象和int。这是不正确的,您需要传递intintCString(或const char*int长度。

要解决此问题,您应该执行以下操作:

CString strState;
strState.Format("%d", currentState[i].num); // Or use atoi()/wtoi() functions
TextOut(currentState[i].pos.CenterPoint().x, currentState[i].pos.CenterPoint().x, strState);