无法转换参数

编程入门 行业动态 更新时间:2024-10-11 11:23:24
无法转换参数 - 转换失去限定符(Cannot convert parameter - Conversion loses qualifiers)

我常常被const正确性所困扰,这似乎也不例外。 请告诉我为什么下面的代码不会编译:

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 Express。 可根据要求提供其他编译/链接器选项。

I'm frequently troubled by const correctness, and this seems to be no exception. Please advise me why the following code wont compile:

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; }

The error given is:

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

I'm compiling on Visual C++ 2010 Express. Additional compile/linker options available upon request.

最满意答案

当您编写const string_type input_string ,将忽略typedef的const 。 所以你试图将const wchar_t*转换为wchar_t* 。 如果你改变typedef wchar_t* string_type; to 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来看到这一点,它也可以工作。

When you write const string_type input_string the const is ignored for typedef. So you are trying to convert const wchar_t* to a wchar_t*. If you changetypedef wchar_t* string_type; to typedef const wchar_t* string_type; it should compile.

const string_type input_string would look like wchar_t *const input_string whereas you expected const wchar_t*. You can see this by changing const wchar_t *str to wchar_t *const str and it will also work.

更多推荐

本文发布于:2023-08-05 04:35:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1428163.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:参数

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!