gpt4 book ai didi

c++ - g++: const 丢弃限定符

转载 作者:可可西里 更新时间:2023-11-01 17:04:30 26 4
gpt4 key购买 nike

为什么我会得到一个discard qualifiers错误:

customExc.cpp: In member function ‘virtual const char* CustomException::what() const’:
customExc.cpp: error: passing ‘const CustomException’ as ‘this’ argument of ‘char customException::code()’ discards qualifiers

关于下面的代码示例

#include <iostream>


class CustomException: public std::exception {

public:

virtual const char* what() const throw() {
static std::string msg;
msg = "Error: ";
msg += code(); // <---------- this is the line with the compile error
return msg.c_str();
}

char code() { return 'F'; }
};

在解决类似问题之前,我已经在 SOF 上搜索过。

我已经在每个可能的地方添加了一个const

请赐教 - 我不明白...

编辑:以下是在 Ubuntu-Carmic-32bit (g++ v4.4.1) 上重现的步骤

  1. 将示例保存为 customExc.cpp
  2. 输入make customExc.o

编辑:该错误与CustomException 相关。 Foo 类与它无关。所以我删除了它。

最佳答案

CustomException::what 调用 CustomException::codeCustomException::what 是一个 const 方法,由 const after what() 表示。因为它是一个 const 方法,所以它不能做任何可能修改自身的事情。 CustomException::code 不是 const 方法,这意味着它 promise 不修改自身。所以 CustomException::what 不能调用 CustomException::code

请注意,const 方法不一定与 const 实例相关。 Foo::bar 可以将其 exc 变量声明为非常量并调用常量方法,如 CustomException::what;这只是意味着 CustomException::what promise 不会修改 exc,但其他代码可能会。

C++ FAQ 有更多关于 const methods 的信息.

关于c++ - g++: const 丢弃限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2412608/

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