我正在尝试使用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/