为什么我在执行以下操作时遇到与wchar_t相关的错误?
namespace Foo
{
typedef std::wstring String;
}
现在我通过程序将所有字符串声明为Foo :: String,但是当我尝试从wchar_t *创建一个新的Foo :: String时,我得到一个错误,例如:
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'
怎么了?
编辑抱歉,我想说Bar :: COMMON_BAR :(
我也正在编辑visual studio 2008.我真的很沮丧。
编辑#2
抱歉,我不能早点回复。问题证明是一个比我想要的更大的问题。我现在注意到使用std :: wstring有多少;代码中有浮动的东西。
这是全局头文件的绝对底部。
// WStrings are a waste
// Feb 2007
#define wstring string
唉。谢谢,对不起这有点浪费空间:(
答案 0 :(得分: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。
答案 1 :(得分:0)
随着变化,它编译好我: Foo :: String A(Bar :: COMMON_BAR);
什么是COMMON_DATA_PATH?
答案 2 :(得分:0)
为什么你在构造函数中有COMMON_DATA_PATH而在Foo中有COMMON_BAR?这是错误的吗?
答案 3 :(得分: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\
尝试使你的等效,并看看是否改善了事情(实际上,只需要第二行)。如果是这样的话,那么你就可以重新添加东西,直到它再次破裂,找出罪魁祸首。
可能有帮助的另一件事是在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;
如果它落在其他地方,那可能是你的问题。
您可以使用String
中的main()
符号执行类似操作,IDE应跳转到您的typedef
。