gpt4 book ai didi

android - 需要关于使用 const 参数覆盖函数的警告

转载 作者:搜寻专家 更新时间:2023-11-01 08:11:30 25 4
gpt4 key购买 nike

如何让 GCC 通知我重新定义具有不同签名的成员函数?

我正在将一个大型项目移植到 Android。由于 M$VC 和 GCC 方言的不同,我为函数参数插入了一些 const 修饰符。(即,当您调用 func(MyClass(something)) 时,M$ 可以使用 MyClass& 而 GCC 需要 const MyClass&。)

问题在于,当您更改 BaseClass::func() 的签名时,您不会收到有关 DerivedClass::func() 具有不同签名的警告.

这是一个显示正在发生的事情的小程序:

#include <stdio.h>
class Value {
int x;
public:
Value(int xx):x(xx){}
};
class Base {
public:
virtual void f(const Value&v) {printf("Base\n");}
};
class First: public Base {
public:
virtual void f(Value&v) {printf("First\n");}
};
class Second: public Base {
public:
virtual void f(Value&v) {printf("Second\n");}
};

int main() {
Value v(1);
First first;
Second second;
Base*any;
any = &first;
any->f(v);
any->f(Value(2));
first.f(v);
//first.f(Value(3)); // error: no matching function for call to
First::f(Value)
}

当我编译并运行它时,我得到:

$ g++ -Wall -Wextra inher2.cpp 
inher2.cpp:10:18: warning: unused parameter ‘v’
inher2.cpp:15:18: warning: unused parameter ‘v’
inher2.cpp:20:18: warning: unused parameter ‘v’
$ ./a.out
Base
Base
First
$

(gcc 关于未使用的参数是正确的,但它是无关紧要的。)

所以:如何让 GCC 通知我重新定义具有不同签名的成员函数?

最佳答案

那应该是-Woverloaded-virtual。

-Woverloaded-virtual

 Warn when a derived class function declaration may be an error in
defining a virtual function (C++ only). In a derived class, the
definitions of virtual functions must match the type signature of a
virtual function declared in the base class. With this option, the
compiler warns when you define a function with the same name as a
virtual function, but with a type signature that does not match any
declarations from the base class.

关于android - 需要关于使用 const 参数覆盖函数的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9113787/

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