Нет легального преобразования в указатель this - PullRequest
7 голосов
/ 30 ноября 2010

Пожалуйста, посмотрите на этот код и запустите его:
Я получаю очень странную ошибку:
Ошибка 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;
}  

Я абсолютно не понимаю, это сообщение об ошибке.Надеюсь, кто-нибудь может мне помочь с этим.Спасибо.

Ответы [ 2 ]

12 голосов
/ 30 ноября 2010

Я заметил, что Allocate объявлено const, но allocate_help нет - может ли это быть связано с проблемой?

1 голос
/ 24 февраля 2016

У меня была та же ошибка, которая также была вызвана const, но немного по-другому.

У меня есть две виртуальные функции (перегрузки), одна была const, а другая нет.Это было причиной проблемы.Оказывается, если вы хотите перегрузить функцию, они оба должны совпадать, если они const или нет.

virtual void value() const = 0;
virtual void value(MyStruct & struct) = 0;

Приведенный выше код вызовет эту ошибку.Исправление заключается в том, чтобы изменить объявление 2-го на:

virtual void value(MyStruct & struct) const = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...