我正在使用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自己制造的傻瓜,对吗?
答案 0 :(得分:1)
您的方法应该实现为
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
您可以发布更多代码吗?