//------1-------CString s;
int i=0;s.Format("%d",i);
pDC->TextOut(0,0,s);
//------2------CString *s;
int i=0;s->Format("%d",i);
pDC->TextOut(0,0,s);为什么1能够执行,2就不行呢??
int i=0;s.Format("%d",i);
pDC->TextOut(0,0,s);
//------2------CString *s;
int i=0;s->Format("%d",i);
pDC->TextOut(0,0,s);为什么1能够执行,2就不行呢??
1、S 没有初始化
2、TextOut的定义如下virtual BOOL TextOut(
int x,
int y,
LPCTSTR lpszString,
int nCount
);
BOOL TextOut(
int x,
int y,
const CString& str
);在1中,根据参数类型,是前一种情况
在2中,是后一种情况,有于CString *s;只定义,没初始化
int x,
int y,
const CString& str
);这个表示的是CString的引用吧。好像没有用CString的指针作为参数的用法吧?
用*声明的变量是指针变量,在使用前都需要先分配内存
BOOL TextOut(
int x,
int y,
const CString& str
);这个表示的是CString的引用吧。好像没有用CString的指针作为参数的用法吧?
------------
传指针和引用都是传的地址。
如果你用textout 直接将指针作为参数,比如CString * pStr,然后textout(x,y,pStr),你试试编译能通过不?我这里不成,
cannot convert parameter 3 from 'class CString *' to 'const class CString &'
其实错误不在TextOut上,而是在Format上,还是内存分配的问题,如果你有一个
CString * pStr=new CString();然后再Format,就没事了。
调用的时候就TextOut(x,y,* pStr);即可。至于传值的问题,其实从format的arglist中已经读入了相应的字串,在其用GetBuffer获取缓冲的时候出的问题,对应的指针未分配内存,是NULL,因此就出错了。