“指定为朋友的不存在的成员函数” - ?

时间:2010-06-19 13:45:53

标签: c++ visual-studio-2008

我正在尝试使用Visual Studio编译CSSTidy。

问题在于它抛出

  

错误C2245:指定为朋友的不存在的成员函数'umap :: erase'(成员函数签名与任何重载都不匹配)

指向

friend void umap<keyT,valT>::erase(const typename umap<keyT,valT>::iterator& it);

这是在 umap 类中声明的 iterator 类中的声明。

有人能告诉我在哪里可以深入了解问题究竟是什么? AFAIK源代码在MinGW编译......

2 个答案:

答案 0 :(得分:2)

修复,转发声明“类迭代器”;在类umap的顶部,并将“class iterator”的impl移动到类umap的底部。原因是,MickySoft VS似乎有一个缺陷导致它无法识别在umap :: iterator的impl下面声明的umap :: erase。

template <class keyT, class valT>
class umap 
{
    typedef map<keyT,valT> StoreT;
    typedef std::vector<typename StoreT::iterator> FifoT;
private:
    FifoT sortv;
    StoreT content;

public:

    class iterator;

    [...snip...]

  void erase(const typename umap<keyT,valT>::iterator& it)
  {
   content.erase(*it.pos);
   sortv.erase(it.pos);
  }

    [...snip...]

    // Iterator

    class iterator
    {
    [...snip...]
    }};

答案 1 :(得分:0)

  

源代码在MinGW中编译

呃..所以?

在编译内部类时,编译器是否可以看到umap擦除成员函数?

Billy3