请查看此代码并运行它:
我得到了很奇怪的错误:
错误1错误C2663:'Allocator :: allocate_help':2个重载没有'this'指针的合法转换
template<class FailureSignal>
class Allocator
{
private:
template<class Exception,class Argument>
void allocate_help(const Argument& arg,Int2Type<true>)
{
}
template<class Exception,class Argument>
std::nullptr_t allocate_help(const Argument& arg,Int2Type<false>)
{
return nullptr;
}
public:
template<class T>
void Allocate(signed long int nObjects,T** ptr = 0)const
{
allocate_help<std::bad_alloc>(1,Int2Type<true>());
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Allocator<int> all;
all.Allocate<int>(1);
return 0;
}
我绝对不明白这个错误的消息。希望有人可以帮助我。谢谢。
答案 0 :(得分:12)
我注意到Allocate
已声明为const
但allocate_help
未声明 - 可能与此问题有关吗?
答案 1 :(得分:1)
我遇到了同样的错误,这个错误也是由const
引起的,但方式有点不同。
我有两个虚函数(重载),一个是const
而另一个不是。这导致了这个问题。如果你想重载一个函数,它们都需要匹配,如果它们是const
的话。
virtual void value() const = 0;
virtual void value(MyStruct & struct) = 0;
上面的代码会导致此错误。解决方法是将第二个声明更改为:
virtual void value(MyStruct & struct) const = 0;
答案 2 :(得分:0)
当我尝试在const声明的方法中更改成员数据时,我遇到了这个问题。
众所周知,const方法应该不更改成员数据。 编译器gcc / clang不会返回正确的错误消息。
从
删除const指定符后,它已成功编译void I_am_a_const_method_but_trying_to_modify_member() const{
amap.emplace(std::make_tuple(1, 1, "a"), 1);
}