2009-11-13 43 views
2

为什么当我做以下我遇到与wchar_t有关的错误?typedef'ing STL wstring

namespace Foo 
{ 
    typedef std::wstring String; 
} 

现在,我宣布我的所有字符串为Foo ::字符串,通过了计划,但是当我曾试图创建从wchar_t的一个新的Foo ::字符串*我得到一个错误,例如:

namespace Bar 
{ 
    static const wchar_t* COMMON_BAR = L"Hello"; 
} 

int main() 
{ 
    Foo::String A(Bar::COMMON_BAR); 
}; 

我从Visual Studio中的以下错误:

error C2440: '<function-style-cast>' : cannot convert from 'const wchar_t *' to 'Foo::String' 

的哪些错误?

编辑对不起,我彪说酒吧:: COMMON_BAR :(

而且我正在编制上的Visual Studio 2008年,我真的被这个沮丧。

编辑#2

抱歉,我无法对此做出回应,问题变成了比我想要的更大的问题,现在我注意到使用std :: wstring;在代码中有多少东西在浮动......

这是全局头文件的绝对底部。

// WStrings are a waste 
// Feb 2007 
#define wstring string 

呃。谢谢,对不起,这是有点空间:(浪费

+0

投票结束为*不是一个真正的问题*,因为它不是可重复的,由几个答案证明他们没有问题编译相同的代码。我并不否认你的程序被破坏了,但我很清楚你在这个问题上询问的不是原因。 – 2009-11-13 06:10:42

+0

请显示不能编译的_complete_源代码。因为这样做。 – 2009-11-13 06:24:06

+0

这可能会浪费太空的空间,但请将这一行代码发布到TheDailyWTF--这真是太棒了,值得一些宣传。 – 2009-11-14 00:51:51

回答

1

下面的代码编译和下LLVM-GCC跑:

#include <string> 
namespace Foo 
{ 
    typedef std::wstring String; 
} 

namespace Bar 
{ 
    static const wchar_t* COMMON_BAR = L"Hello"; 
} 

int main() 
{ 
    Foo::String A(Bar::COMMON_BAR); 
}; 

请注意,您是不小心产生了COMMON_DATA_PATH。我不知道你使用的编译器,但LLVM-GCC提供了以下错误:

/tmp/webcompile/_1569_0.cc: In function 'int main()': 
/tmp/webcompile/_1569_0.cc:14: error: 'COMMON_DATA_PATH' is not a member of 'Bar' 
/tmp/webcompile/_1569_0.cc: At global scope: 
/tmp/webcompile/_1569_0.cc:9: warning: 'Bar::COMMON_BAR' defined but not used 

尝试一下现场演示here

+0

看起来像我正在写这篇文章,并在您最近的编辑之后发布它。 – s1n 2009-11-13 04:49:56

0

它编译罚款,我的变化: 富:: String一个(栏:: COMMON_BAR);

什么是COMMON_DATA_PATH

0

?为什么你在富构造和COMMON_BAR COMMON_DATA_PATH这是misstype

0

你贴编译(加的#include <string>)的罚款,我与32位VS 2008编译器的代码:版本15.00.21022.08

所以,我猜你有一些奇怪的事情在你的包括这是搞砸了什么std::wstring是。

我包括路径有以下几点:

C:\Program Files\Microsoft Visual Studio 9.0\VC\ATLMFC\INCLUDE 
C:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE 
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include 
C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\include\ 

尽量让你的当量,看看是否有改善的事情(实际上,只有2号线应该是必要的)。如果是这样,那么你正在把事情加回去,直到它再次破坏找出罪魁祸首。

另一件可能有用的事情是在IDE中将光标置于wstring符号上,右键单击并选择“转到声明”。 IDE应开拓c:\Program Files\Microsoft Visual Studio 9.0\VC\include\xstring头文件上的声明,看起来像:

typedef basic_string<wchar_t, char_traits<wchar_t>, 
allocator<wchar_t> > wstring; 

如果它的土地别处,这可能是你的问题。

您可以使用main()中的String符号进行类似操作,IDE应跳转至您的typedef