标签:
环境:
win7 32bits
Visual Studio 2013
参考:https://msdn.microsoft.com/zh-cn/library/4ddd21xh.aspx
错误说明“prototype”: 未调用原型函数(是否是有意用变量定义的?
下列示例将产生C4930错误
// C4930.cpp
// compile with: /W1
class Lock {
public:
int i;
};
void f() {
Lock theLock(); // C4930
// try the following line instead
// Lock theLock;
}
int main() {
}当编译器无法分清函数原型声明与函数调用时,也会出现 C4930。
下面的示例生成 C4930:
// C4930b.cpp
// compile with: /EHsc /W1
class BooleanException
{
bool _result;
public:
BooleanException(bool result)
: _result(result)
{
}
bool GetResult() const
{
return _result;
}
};
template<class T = BooleanException>
class IfFailedThrow
{
public:
IfFailedThrow(bool result)
{
if (!result)
{
throw T(result);
}
}
};
class MyClass
{
public:
bool MyFunc()
{
try
{
IfFailedThrow<>(MyMethod()); // C4930
// try one of the following lines instead
// IfFailedThrow<> ift(MyMethod());
// IfFailedThrow<>(this->MyMethod());
// IfFailedThrow<>((*this).MyMethod());
return true;
}
catch (BooleanException e)
{
return e.GetResult();
}
}
private:
bool MyMethod()
{
return true;
}
};
int main()
{
MyClass myClass;
myClass.MyFunc();
}
----------------------------------------------------------------------------------------------------------------------
在我自己的代码中如下情况会出现C4930错误:
class mycomparison
{
bool reverse;
public:
mycomparison()
{
//cout << "construct" << endl;
}
mycomparison(bool revparam)
{
reverse = revparam;
}
bool operator() (const int& lhs, const int&rhs) const
{
return lhs > rhs;
// if (reverse) return (lhs>rhs);
// else return (lhs<rhs);
}
};在主函数中声明优先级队列:
int main()
{
priority_queue<int, vector<int>, mycomparison>pq(mycomparison());//C4930
system("pause");
return 0;
}可以做如下两种修改:
第一种方式:
priority_queue<int, vector<int>, mycomparison>pq(( mycomparison() ));//补充括号第二种方式:
priority_queue<int, vector<int>, mycomparison>pq(mycomparison::mycomparison());//补充::访问符号
标签:
原文地址:http://blog.csdn.net/zhangxiao93/article/details/51346627