标准模板库的C ++ IntelliSense错误:<error-type> *?</error-type>

时间:2014-04-28 21:16:47

标签: c++ iterator intellisense standard-library

我正在使用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自己制造的傻瓜,对吗?

1 个答案:

答案 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

您可以发布更多代码吗?