Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Visual C++] Błąd C2893: Nie powiodła się specjalizacja szablonu funkcji 'unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)'

Ostatnio zmodyfikowano 2017-03-28 17:27
Autor Wiadomość
Kinexity
Temat założony przez niniejszego użytkownika
[Visual C++] Błąd C2893: Nie powiodła się specjalizacja szablonu funkcji 'unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)'
» 2017-03-28 01:08:18
Witam wszystkich!
Mam problem z moim kodem. Nie chce on przyjąć obiektu jako argumentu funkcji wywoływanej w oddzielnym wątku.

Kod funkcji:

C/C++
void C_prime_multithread::prime_threads() {
    for( int i = 0; i < 4; i++ ) {
        primes[ i ] = thread( threads_handler, this );
        //Błąd C2672 „std::invoke”: nie znaleziono zgodnej przeciążonej funkcji
        //Błąd C2893 Nie powiodła się specjalizacja szablonu funkcji 'unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)'
       
    }
    for( int i = 0; i < 4; i++ ) {
        primes[ i ].join();
    }
}

void threads_handler( C_prime_multithread & this_obj )
{
    this_obj.is_prime( 1 );
}

Fragment nagłówka:

C/C++
friend void threads_handler( C_prime_multithread & this_obj );

Możliwe, że to tylko głupie przeoczenie z mojej strony, ale nie rozumiem co jest źle.
P-159498
Monika90
» 2017-03-28 10:50:20
Parametrem funkcji threads_handler jest referencja do obiektu, a próbujesz wywołać ją ze wskaźnikiem. Zmień parametr na wskaźnik.

Prawdopodobnie niepotrzebnie funkcja ta jest zaprzyjaźniona, będzie prościej jeśli będzie składnikiem klasy.
P-159505
Kinexity
Temat założony przez niniejszego użytkownika
» 2017-03-28 17:27:41
Dzięki!
Problem rozwiązany.
P-159533
« 1 »
  Strona 1 z 1