需要登录使用LogMethod()的问题下面BUF的内容是 LogMethos只接受 “常量的CString &”如何从一个字符数组创建一个CString?
char buf[1024];
strcpy(buf, cErrorMsg);
// need to pass to LogMethod "buf" how do i do that?
log.LogMethod(const CString &);
Thans 启
反相
需要登录使用LogMethod()的问题下面BUF的内容是 LogMethos只接受 “常量的CString &”如何从一个字符数组创建一个CString?
char buf[1024];
strcpy(buf, cErrorMsg);
// need to pass to LogMethod "buf" how do i do that?
log.LogMethod(const CString &);
Thans 启
反相
如果你在谈论MFC CString
,据我所知,它应该有一个非明确的构造函数,采用TCHAR const *
。换句话说,以下应该起作用。
log.LogMethod(buf);
如果没有,请发布错误信息。
没有错误.....只是没有记录 – Reversed 2010-01-14 18:29:14
log.LogMethod(CString(buf));
这将避免其中使用适当的构造,因为该参数是一个参考,编译器将不会自动创建CString对象的问题(这将具有如果参数是一个“纯”的CString)。
这是没有区别,参数是'CString'或'CString常量&',在这两种情况下都会执行转换。在后一种情况下,将创建临时文件并与参考文件绑定。 – avakar 2010-01-14 16:35:37
在通用转换的情况下是这样的,但是对于CString 这是不正确的,因为构造函数(接受char *)已被声明为明确的,除非我错了,否则会使编译器无法自动选择它用于这种转换。当它的CString&常量,但它在VS2005中不起作用 原因:不能从'const char [5]'转换为'const CString' 类'ATL :: CStringT
我非常怀疑微软会改变版本之间的显式性,因为它会破坏很多现有的代码。此外,文档(http://msdn.microsoft.com/en-us/library/cws1zdt8%28VS.80%29.aspx)清楚地显示构造函数不是显式的。你确定你没有尝试编译为Unicode,同时仍然通过'char const *'作为参数(这确实会触发显式的非TCHAR构造函数)? – avakar 2010-01-14 21:46:32
什么是'CString'?你是指ATL/MFC?在C++中,标准字符串是'std :: string'。 'CString'可以是任何东西,例如代码库中的同事编码的类。 – 2010-01-14 15:46:15
//log.LogDebug(CString(buf)); \t //log.LogDebug(buf); // str = buf; //log.LogDebug(str); 上面的代码都没有工作... – Reversed 2010-01-14 18:27:54
然后问题在别的地方。告诉我们'LogMethod'的代码。 – avakar 2010-01-14 21:47:29