gpt4 book ai didi

c++ - 我该如何解释这个 C++ 错误

转载 作者:太空宇宙 更新时间:2023-11-03 10:44:31 25 4
gpt4 key购买 nike

我有这行代码(行是字符串类型):

char* p = line.data;

在你回复之前,我已经弄清楚我做错了什么,我需要在最后加上一些括号。我想问你的是我应该如何解释我得到的错误以供将来引用:

error: cannot convert ‘std::basic_string<_CharT, _Traits, _Alloc>::data<char, std::char_traits<char>, std::allocator<char> >’ from type ‘const char* (std::basic_string<char>::)()const noexcept (true)’ to type ‘char*’

所以首先我必须问,这会不会更令人困惑?您的 C++ 开发人员究竟如何应对此类问题?感谢天堂的高级语言吧?好的,所以所有这些问题都只是反问。

好的,我现在已经读了十几遍这个错误了。我还查看了字符串数据方法文档,它确实说它返回一个 char*。所以我对以下内容感到困惑:

  1. 指的是:

    basic_string<_CharT, _Traits, _Alloc>

根据 basic_string 文档,它有一个模板参数,但这个错误似乎是说有三个:_CharT、_Traits 和 _Alloc。为什么这个基本字符串在 documentation 时有三个模板参数?说它有一个?我想我不明白如何解释该文档或该错误消息。

  1. 那么数据部分好像也有模板参数,

    ...::data<char, std::char_traits<char>, std::allocator<char> >

但是根据'data'方法文档,它是这样定义的:

    const char* data() const noexcept;

我在该定义中没有看到任何模板参数。为什么错误消息显示所有这些模板参数?

  1. 然后它变得更加困惑,错误消息说它正在尝试从以下类型进行转换:

    const char* (std::basic_string<char>::)()const noexcept (true)

所以我认为这是 C++ 描述函数类型的方式,对吗?为什么它以括号中的 true 一词结尾?

所以我想我主要是想弄清楚为什么 C++ 异常具有我在任何文档中都没有看到的所有这些奇怪的模板参数。

最佳答案

您提供的错误消息似乎被严重错误引用(或被解析器破坏)。 GCC 产生以下内容

error: cannot convert ‘std::basic_string<_CharT, _Traits, _Alloc>::data<char, std::char_traits<char>, std::allocator<char> >’ from type ‘const char* (std::basic_string<char>::)()const’ to type ‘char*’
  1. 我不知道什么文档告诉你 std::basic_string 只有一个模板参数。它有三个。

  2. 类本身和类的成员函数是独立模板。所以basic_string是一个模板类,成员函数basic_string::data()是一个单独的模板函数。错误消息为您提供了该 data 模板函数的全名

    std::basic_string<_CharT, _Traits, _Alloc>::data<char, std::char_traits<char>, std::allocator<char> >

    第一部分

    std::basic_string<_CharT, _Traits, _Alloc>

    只是类名,其余的是模板函数,函数名后列出了实际的模板参数。这绝不是引用此模板的完美方式。它很可能以某种方式从编译器的内部工作中派生而来。

  3. 从语言的角度来看,“从函数类型转换”部分没有逻辑。从 C++ 语言的角度来看,line.data 根本不是一个有效的表达式。因此它没有类型。但是,显然 GCC 编译器的内部工作原理将该组合视为成员函数类型的表达式。错误消息实际上将该类型显示为

    const char* (std::basic_string<char>::)()const

    其他编译器也这样做。同样,这只是编译器的内部机制。

关于c++ - 我该如何解释这个 C++ 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25277250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com