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

Wskaźniki do metod i składników

Ostatnio zmodyfikowano 2016-12-14 00:37
Autor Wiadomość
Lich555
Temat założony przez niniejszego użytkownika
Wskaźniki do metod i składników
» 2016-12-13 23:42:06
Witam.
Mam 3 klasy w 3 różnych projektach:
1.Wskaźnik do metody. Błąd: undefined reference to 'concorde::tankowanie(float)'
C/C++
...
class concorde
{
public:
    int ster, podwozie;
    int tankowanie( float ), start( float ), zaladunek( float );
};

int main()
{
   
    int( concorde::* wskfun )( float );
    wskfun = & concorde::tankowanie;
    concorde bialy;
    ( bialy.* wskfun )( 900.33 );
   
    return 0;
}
2.Tablica wskaźników do metod. Błąd: undefined reference to 'K::tankowanie(float)', Błąd: undefined reference to 'K::zaladunek(float)'
C/C++
...
class K
{
public:
    int tankowanie( float ), zaladunek( float );
};

int main()
{
    int( K::* tabwskfun[ 8 ] )( float );
    tabwskfun[ 0 ] = K::tankowanie;
    tabwskfun[ 1 ] = K::zaladunek;
    K egzemplarz;
    ( egzemplarz.* tabwskfun[ 0 ] )( 7.43 );
   
    return 0;
}
3.Wskaźniki do składników statycznych. Błąd: undefined reference to 'K::biurko'
C/C++
...
class K
{
public:
    static int biurko;
};

int main()
{
    int * wsk = & K::biurko;
    return 0;
}

Czemu wyskakują mi takie błędy?
P-154887
mateczek
» 2016-12-14 00:05:55
brak metod zdefiniowanych, tylko podeklarowane
C/C++
#include <iostream>
class concorde
{
public:
    float tankowanie( float a ) {
        return a;
    }
};

int main()
{
   
    float( concorde::* wskfun )( float );
    wskfun = & concorde::tankowanie;
    concorde bialy;
    std::cout <<( bialy.* wskfun )( 900.33 );
   
    return 0;
}

albo tak
C/C++
#include <iostream>
class concorde
{
public:
    float tankowanie( float );
};
float concorde::tankowanie( float a ) {
    return a;
}


int main()
{
   
    float( concorde::* wskfun )( float );
    wskfun = & concorde::tankowanie;
    concorde bialy;
    std::cout <<( bialy.* wskfun )( 900.33 );
   
    return 0;
}
P-154888
mokrowski
» 2016-12-14 00:37:20
C/C++
class K
{
public:
    int tankowanie( float ), zaladunek( float );
};

// Jeśli chcesz się odwoływać do metod, dobrze jest je zdefiniować :-)
int K::tankowanie( float ) {
    return 42;
}

int K::zaladunek( float ) {
    return 42;
}

int main()
{
    int( K::* tabwskfun[ 8 ] )( float );
    // Kompilator ma tu niejednoznaczność czy chodzi Ci o wartość zmiennej statycznej czy
    // o jej adres. Adres podajesz jawnie.
    tabwskfun[ 0 ] = & K::tankowanie;
    tabwskfun[ 1 ] = & K::zaladunek;
    K egzemplarz;
    ( egzemplarz.* tabwskfun[ 0 ] )( 7.43 );
   
    return 0;
}
C/C++
class K
{
public:
    static int biurko;
};

// Składowa statyczna wymaga inicjowania.
int K::biurko = 42;

int main()
{
    int * wsk = & K::biurko;
    return 0;
}
P-154889
« 1 »
  Strona 1 z 1