не удается разрешить метод addOnCompleteListener

not необходимо поместить реализацию в файл заголовка, см. альтернативное решение в конце этого ответа.

В любом случае причина, по которой ваш код не работает, что при создании экземпляра шаблона компилятор создает новый класс с заданным аргументом шаблона. Например:

template
struct Foo
{
    T bar;
    void doSomething(T param) {/* do stuff using T */}
};

// somewhere in a .cpp
Foo f; 

При чтении этой строки компилятор создаст новый класс (назовем его FooInt), что эквивалентно следующему:

struct FooInt
{
    int bar;
    void doSomething(int param) {/* do stuff using int */}
}

Следовательно, компилятор должен иметь доступ к реализации методов, чтобы создать экземпляр с аргументом шаблона (в данном случае int). Если эти реализации не были в заголовке, они не были бы доступны, поэтому компилятор не смог бы создать экземпляр шаблона.

Общим решением для этого является запись объявления шаблона в заголовок файла, затем реализовать класс в файле реализации (например, .tpp) и включить этот файл реализации в конец заголовка.

// Foo.h
template 
struct Foo
{
    void doSomething(T param);
};

#include "Foo.tpp"

// Foo.tpp
template 
void Foo::doSomething(T param)
{
    //implementation
}

Таким образом, реализация по-прежнему отделена от объявления, но доступен компилятору.

Другое решение состоит в том, чтобы сохранить реализацию отдельно и явно создать все экземпляры шаблона, которые вам понадобятся:

// Foo.h

// no implementation
template  struct Foo { ... };

//----------------------------------------    
// Foo.cpp

// implementation of Foo's methods

// explicit instantiations
template class Foo;
template class Foo;
// You will only be able to use Foo with int or float

Если мое объяснение isn ' t достаточно ясно, вы можете взглянуть на C ++ Super-FAQ по этому вопросу .

-5
задан Frank van Puffelen 13 July 2018 в 17:32
поделиться

1 ответ

Вам не хватает ключевого слова this. Попробуйте

.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { .... }

Проверьте раздел «Регистрация новых пользователей» в Настройте Firebase Authentication для Android , и вы увидите, где вы его не видите

Или попробуйте

Я проверил различия между вашим кодом и моим, и единственное важное отличие находится в файле build.gradle приложения, где я реализую этот

implementation 'com.google.firebase:firebase-core:16.0.1'

, а вы нет. Попробуйте реализовать это.

0
ответ дан Dominic Orim 17 August 2018 в 12:24
поделиться
  • 1
    Я попытался, но ошибка все тот же. учебник, который я следую, также не имеет & quot; этого & quot; это видеосвязь. просмотрите время 8.40 youtube.com/… вы можете увидеть весь проект и помочь мне. Благодарю. – Vinoli Senanayake 13 July 2018 в 16:43
  • 2
    @Dominic: существует также перегрузка addOnCompleteListener, которая принимает только слушателя: developers.google.com/android/reference/com/google/android/gms/… – Frank van Puffelen 13 July 2018 в 17:34
  • 3
    я новый для разработки приложений, я не понял, что сказал. где поставить этот addOnCompleteListener и решить мою ошибку? – Vinoli Senanayake 13 July 2018 в 18:36
  • 4
    Хорошо. На самом деле я этого не понимаю. Я проверил различия между вашим кодом и моим, и единственное важное различие находится в файле build.gradle приложения, где я реализую это implementation 'com.google.firebase:firebase-core:16.0.1', а вы этого не делаете. Не могли бы вы попробовать? – Dominic Orim 14 July 2018 в 08:45
  • 5
    Спасибо @FrankvanPuffelen. Я не заметил, что – Dominic Orim 14 July 2018 в 08:48
Другие вопросы по тегам:

Похожие вопросы: