2010-01-14 132 views
1

需要登录使用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 启

反相

+1

什么是'CString'?你是指ATL/MFC?在C++中,标准字符串是'std :: string'。 'CString'可以是任何东西,例如代码库中的同事编码的类。 – 2010-01-14 15:46:15

+0

//log.LogDebug(CString(buf)); \t //log.LogDebug(buf); // str = buf; //log.LogDebug(str); 上面的代码都没有工作... – Reversed 2010-01-14 18:27:54

+0

然后问题在别的地方。告诉我们'LogMethod'的代码。 – avakar 2010-01-14 21:47:29

回答

1

如果你在谈论MFC CString,据我所知,它应该有一个非明确的构造函数,采用TCHAR const *。换句话说,以下应该起作用。

log.LogMethod(buf); 

如果没有,请发布错误信息。

+0

没有错误.....只是没有记录 – Reversed 2010-01-14 18:29:14

0
CString cs; 
cs = buf; 

log.LogMethod(cs) 
+0

没有错误.....只是没有记录 – Reversed 2010-01-14 18:36:32

1
log.LogMethod(CString(buf)); 

这将避免其中使用适当的构造,因为该参数是一个参考,编译器将不会自动创建CString对象的问题(这将具有如果参数是一个“纯”的CString)。

+0

这是没有区别,参数是'CString'或'CString常量&',在这两种情况下都会执行转换。在后一种情况下,将创建临时文件并与参考文件绑定。 – avakar 2010-01-14 16:35:37

+0

在通用转换的情况下是这样的,但是对于CString 这是不正确的,因为构造函数(接受char *)已被声明为明确的,除非我错了,否则会使编译器无法自动选择它用于这种转换。当它的CString&常量,但它在VS2005中不起作用 原因:不能从'const char [5]'转换为'const CString' 类'ATL :: CStringT '的构造函数被声明为'explicit' – Ruddy 2010-01-14 17:04:10

+0

我非常怀疑微软会改变版本之间的显式性,因为它会破坏很多现有的代码。此外,文档(http://msdn.microsoft.com/en-us/library/cws1zdt8%28VS.80%29.aspx)清楚地显示构造函数不是显式的。你确定你没有尝试编译为Unicode,同时仍然通过'char const *'作为参数(这确实会触发显式的非TCHAR构造函数)? – avakar 2010-01-14 21:46:32