模板函数调用错误503
False positive Error 503 for call to template function
我有一些代码,PC-Lint给我错误503:布尔参数关系。它是对模板函数的调用,定义如下:
template <typename ITypeToUse>
void ShowWindowEx(
HWND hWnd,
int nCmdShow,
ITypeToUse *pControl);
调用本身看起来像这样:
ShowWindowEx<IActualType>(this->GetWndHandle(), SW_SHOW, m_spControl);
表面上,部分ShowWindowEx<IActualType>(...)
被解释为Identifier1 < Identifier2 > Expression
…PC-Lint似乎没有意识到ShowWindowEx
是一个模板函数,它需要尖括号中的类型,并尽力将其解释为布尔表达式。
我知道我可以简单地告诉lint忽略这一行的错误(尽管实际上它大约有30行),但我想防止这种情况再次发生。此外,据我所知,PC-Lint应该能够处理模板函数调用,你知道为什么这里不是这种情况吗?
声明在头文件中的类内部,调用在该类的另一个成员函数中,该成员函数在ShowWindowEx之前声明。这两个成员函数的实现以相同的顺序发生在.cpp文件中,因此对showwindowwex的调用发生在其实现之前。是否有可能PC-Lint只是忽略了头?
编辑:现在我将函数原型改为:
template <typename IPointerToUse>
void ShowWindowEx(
HWND hWnd,
int nCmdShow,
IPointerToUse pControl);
因此模板将处理指针类型。谢谢DeadMG的建议。问题仍然存在,因为我看不出上面不应该工作的理由,但它也是这样工作的。
503通常是C警告,而不是c++。它可以是你的c++文件包含模板函数调用被Lint认为是一个C文件,也许是通过在Windows机器上使用*.C(大写字母)?或者使用非标准扩展?
我在Windows PC Lint安装中使用Samba来Lint Unix c++程序时看到过这种情况。如果这仍然是一个问题,请查看指示模块名称(如--- Module: ...
)的输出行,并查看括号之间的文件类型。如果关闭,您可能需要使用-vm
(默认)。
如果是这种情况,我希望围绕调用有更多的警告,但是将模板<...>
解释为两个比较操作符会合理地引发此警告。
除此之外,您所呈现的这一行—没有上下文—没有给出503在这里适用的任何理由。
原因可能是在Windows头文件中已经有了ShowWindowEx的定义(一个没有模板定义的定义)。也许你应该试着重命名你的函数
- 错误:调用'getline'没有匹配函数
- 使用 std::find 时没有匹配的函数调用错误
- 错误:调用"es_queue::set_rpc_vector(std::vector >&, std::__cxx11::string)"没有匹配函数
- 使用成员初始值设定项列表时没有匹配的函数调用错误
- 使用另一个函数调用一个函数(都在类中)时出现问题.没有错误代码C++
- 错误:调用'strcmp'没有匹配函数(尝试设置显示用户信息功能)
- 第 5 行:字符 54:错误:调用"min(int,std::__cxx11::basic_string<char>::size_type)"没有匹配函数
- 编译器错误:函数调用在常量表达式中必须有一个常量值
- 错误:调用'function namel'没有匹配函数
- C ++ DLL导入:函数调用返回错误的结果
- 函数调用中出现意外编译错误 (C++)
- C++错误:调用"print_size"没有匹配函数
- 为什么将"<<"运算符作为函数调用会导致"ambiguous call"编译器错误?
- 使用 boost::thread 运行函子,但析构函数被错误地调用
- C ++尝试访问映射中的元素会给我一个不匹配的函数调用错误
- getHighest 函数调用在产生 0 的C++会导致错误
- 错误:调用'begin(long double [nPoints])'没有匹配函数;使用硬编码的 int 与整数变量初始化向量
- 错误:函数调用中有两个参数
- 错误:函数调用中从int到int(*)[4]的转换无效
- 错误 - 函数调用不正确