无法转换参数-转换丢失限定符
Cannot convert parameter - Conversion loses qualifiers
我经常被常量正确性所困扰,这似乎也不例外。请告诉我为什么以下代码无法编译:
class string_token_stream
{
public:
typedef wchar_t* string_type;
string_token_stream(const string_type input_string)
: _input_string(input_string)
{
}
private:
const string_type _input_string;
};
int main(int argc, char **argv)
{
const wchar_t *str = get_a_string_somewhere();
string_token_stream sts(str);
// ^------ Compile-time error C2664.
return 0;
}
给出的错误为:
error C2664: 'string_token_stream::string_token_stream(const string_token_stream::string_type)' : cannot convert parameter 1 from 'const wchar_t *' to 'const string_token_stream::string_type'
1> Conversion loses qualifiers
我正在Visual C++2010学习版上进行编译。可根据要求提供其他编译/链接器选项。
在编写const string_type input_string
时,typedef会忽略const
。所以您正在尝试将const wchar_t*
转换为wchar_t*
。如果将typedef wchar_t* string_type;
更改为typedef const wchar_t* string_type;
,则应该进行编译。
const string_type input_string
看起来像wchar_t *const input_string
,而您期望的是const wchar_t*
。您可以通过将const wchar_t *str
更改为wchar_t *const str
来看到这一点,它也会起作用。
好的,所以根据这个答案,在伪代码中:
"const string_type" <=> "const (char *)" <=> char const * and not "(const char) *".
因此,const wchar_t*
不能转换为const string_type
。
相关文章:
- C++转换参数初始化问题
- C2664 无法从'initializer list'转换参数
- 隐式可转换参数,但属于引用类型
- 传递到函数(C )时转换参数
- 了解错误 C2664:无法转换参数 1
- 错误 C2664:无法从'NvPhysicalGpuHandle'转换参数 1
- Unicode 字符问题/转换参数
- 在运行时根据某些元数据强制转换参数包值
- 错误 C2664:"errno_t wcstombs_s(size_t *,字符 *,size_t,常量 wchar_t *,size_t)":无法转换参数 4
- 错误C2664:无法转换参数错误
- 无法转换参数错误
- Boost.python自动转换参数
- "尝试升级使用已弃用的转换参数指定的输入文件"是什么意思?
- 是否可以在函数模板中转换参数C++?
- 错误C2664:无法转换参数(指纹传感器检测)
- 无法转换参数 - 模板错误
- 编译zxing时,Libconv无法转换参数
- C++ 无法转换参数
- std::p air<_Ty1,_Ty2>::p air<_Ty1,_Ty2>& 无法转换参数
- 无法转换参数-转换丢失限定符