如何使 cppcheck 2.5 在调用构造函数中的虚函数时显示错误。旧版本显示此错误
How to make cppcheck 2.5 show error on calls to a virtual function in constructor. Older version shows this error
cppcheck 规则列表中有
<error id="virtualCallInConstructor" severity="style" msg="Virtual
function 'f' is called from constructor '' at line
- Dynamic binding is not used." verbose="Virtual function 'f' is called from constructor '' at line 1.
Dynamic binding is not used."/>
我已经在我的解决方案中的几个 类 中编写了对虚函数的调用,并 运行 cppcheck o 它们,但没有显示此错误。
我使用了 GUI 以及 运行 从命令行使用 --enable=style 和 --enable=all
cppcheck
如何使 cppcheck 显示此问题?
我正在使用最新的 cppcheck
另一个虚拟代码运行 cppcheck on
class A
{
public:
A() { }
virtual void fin() = 0;
};
class B : public A
{
public:
B() { fin(); }
void fin() { std::cout << "l"; }
};
class C : public B
{
public:
C() {}
void fin() { std::cout << "c"; }
};
更新:我检查了 cppcheck 1.8,它向我显示了这个错误。 2.5 发生了什么,尽管在 2.5 的规则集中声明它应该找到它们,但它没有显示它们?
我找到了这条评论https://sourceforge.net/p/cppcheck/discussion/general/thread/b18f7aaf/#d726
It will be fixed in the next release. For now I have disabled the
check. But it can be enabled again if we write such warnings properly.
The checker must ensure that the class is a base class!
post 对应 1.84
查看它仍然被禁用的代码:
https://github.com/danmar/cppcheck/blob/6397e29f84de53655904326ef1ca892a509275c5/lib/checkclass.h
// FIXME: Only report warnings for inherited classes
// checkClass.checkVirtualFunctionCallInConstructor();
cppcheck 规则列表中有
<error id="virtualCallInConstructor" severity="style" msg="Virtual function 'f' is called from constructor '' at line
- Dynamic binding is not used." verbose="Virtual function 'f' is called from constructor '' at line 1. Dynamic binding is not used."/>
我已经在我的解决方案中的几个 类 中编写了对虚函数的调用,并 运行 cppcheck o 它们,但没有显示此错误。
我使用了 GUI 以及 运行 从命令行使用 --enable=style 和 --enable=all
cppcheck如何使 cppcheck 显示此问题? 我正在使用最新的 cppcheck
另一个虚拟代码运行 cppcheck on
class A
{
public:
A() { }
virtual void fin() = 0;
};
class B : public A
{
public:
B() { fin(); }
void fin() { std::cout << "l"; }
};
class C : public B
{
public:
C() {}
void fin() { std::cout << "c"; }
};
更新:我检查了 cppcheck 1.8,它向我显示了这个错误。 2.5 发生了什么,尽管在 2.5 的规则集中声明它应该找到它们,但它没有显示它们?
我找到了这条评论https://sourceforge.net/p/cppcheck/discussion/general/thread/b18f7aaf/#d726
It will be fixed in the next release. For now I have disabled the check. But it can be enabled again if we write such warnings properly. The checker must ensure that the class is a base class!
post 对应 1.84
查看它仍然被禁用的代码: https://github.com/danmar/cppcheck/blob/6397e29f84de53655904326ef1ca892a509275c5/lib/checkclass.h
// FIXME: Only report warnings for inherited classes
// checkClass.checkVirtualFunctionCallInConstructor();