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

问题是它抛出


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


指向

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


这是在umap类中声明的迭代器类中的声明。

谁能告诉我应该去哪里弄清楚问题出在哪里? AFAIK源代码在MinGW中编译...

最佳答案

该修复程序,向前声明“类迭代器”;在类umap的顶部,将“类迭代器”的impl移到类umap的底部。 MickySoft VS似乎有一个缺陷,导致其无法识别在umap :: iterator的隐含之下声明的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...]
    }};

关于c++ - “指定为 friend 的不存在的成员函数”-?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3075697/

10-09 07:18