繁体   English   中英

标准模板库的C ++ IntelliSense错误: <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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM