![](/img/trans.png)
[英][C++]Intellisense Reports Class Reference of Type <Error-Type>
[英]C++ IntelliSense error with standard template library: <error-type>*?
我正在使用Visual Studio开发游戏对象的消息传递系统,但遇到了奇怪的强制转换错误。 当我调用接受迭代器作为参数的方法时,就会发生这种情况。 调用来自具有成员变量的类中:
std::map<unsigned int, std::list<Foo*>::iterator> listeners;
我在Message类中定义了一个方法,如下所示:
static void UnRegister(unsigned int, std::list<Foo*>::iterator);
方法调用本身看起来像(ID是一个无符号的int变量):
Message::UnRegister(ID, listeners[ID]);
由于某种原因,我收到了IntelliSense错误。 我知道IntelliSense并不是编译器,过去它给了我疯狂的错误,这些错误实际上并不是真正的问题。 不幸的是,整个程序距离可测试性还有很长的路要走,而一切都不会中断,我现在想知道是否需要重新设计整个方法。 错误是:
IntelliSense: no suitable user-defined conversion
from "std::_List_iterator<std::_List_val<std::_List_simple_types<Foo*>>>"
to "std::_List_iterator<std::_List_val<std::_List_simple_types<<error-type>*>>>"
exists
根据Google搜索,当编译器无法确定参数类型时,就会发生这种情况。 除非他们真的对迭代器的工作方式不满意,否则我认为这一定是Visual Studio自欺欺人,对吗?
您的方法应实现为
Message::UnRegister(ID, listeners[ID])
在课外。 您是否错过了Message::
(可能不是,但是我只是问:))在我的系统(OS X g ++ 4.8)上,此代码编译:
#include <map>
#include <list>
using namespace std;
class Foo
{
};
class Message{
public:
static void UnRegister(unsigned int, std::list<Foo*>::iterator){}
};
int main()
{
std::map<unsigned int, std::list<Foo*>::iterator> listeners;
Message::UnRegister(0, listeners[0]);
}
在此处查看在线代码段http://ideone.com/YZL6Uv
您可以发布更多代码吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.