2011-04-23 130 views
1

我有一段最初使用CString的代码。使用它时, http://www.codeproject.com/KB/string/stdstring.aspx将CStdStringW转换为TCHAR *

这个克隆工作得很好,但一个问题仍然存在:

TCHAR *GetConnectionString(){return m_szConnectionString)}; 

我得到的错误,因为它不是提供给VSExpress用户我在发现一个CString“克隆”取而代之“没有合适的从”CStdStringW“到”TCHAR *“的转换存在”,由于字符串处理不是真的是我的优势,我不知道如何解决这个问题。好吧,我知道,我可能必须做某种类型转换,但.... 整块的代码,可以发现: Use CString in console app when using VS Express

好了,有一个不错的一天,希望有人能帮助我的。

问候Lumpi

+2

你应该使用std :: string os std :: wstring – 2011-04-23 10:01:16

回答

1

一旦你提交到一个非标准的字符串类,你坚持必须使用它。你应该改变返回值类型:

CStdString GetConnectionString() { 
    return m_szConnectionString; 
}; 

另一种选择是从TCHAR改变返回类型为const TCHAR:

const TCHAR* GetConnectionString() { 
    return (LPCTSTR)m_szConnectionString; 
}; 

这是不是一个很好的解决方案,它就会失败当调用代码存储指针并且连接字符串被改变时。这是原代码中的一个缺陷。

+0

谢谢你的建议!我会记住这个问题。可能会以艰难的方式学习它(“它会惨败......”),但我会尽快实施您的建议。 Lumpi – Lumpi 2011-04-23 10:31:44

1

根据您发布的链接,CStdStringbasic_string<TCHAR>派生。因此,您可以使用其c_str()方法。

const TCHAR *GetConnectionString() 
{ 
    return m_szConnectionString.c_str(); 
} 
+0

谢谢Frédéric!现在编译没有错误!我真的很讨厌这个事实,即存在大约五亿种不同类型的字符串和字符。好吧,我明白一些不同的基本版本是被定义的,但对我来说,感觉就像我每天都会发现一个新的“字符串问题”。无论如何,感谢您的帮助! – Lumpi 2011-04-23 10:12:20

+0

@Lumpi,你认为C++有字符串问题?你应该尝试一下纯C,所以你可以看到*真正的*字符串问题(提示:*无字符串类型*;) – 2011-04-23 10:17:00

相关问题