我正在尝试使用Visual Studio编译CSSTidy。
问题在于它抛出
错误C2245:指定为朋友的不存在的成员函数'umap :: erase'(成员函数签名与任何重载都不匹配)
指向
friend void umap<keyT,valT>::erase(const typename umap<keyT,valT>::iterator& it);
这是在 umap 类中声明的 iterator 类中的声明。
有人能告诉我在哪里可以深入了解问题究竟是什么? AFAIK源代码在MinGW编译......
答案 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