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

Przełądowanie nie ma legalnej konwersji

Ostatnio zmodyfikowano 2013-03-07 11:03
Autor Wiadomość
Piwniczne
Temat założony przez niniejszego użytkownika
Przełądowanie nie ma legalnej konwersji
» 2013-03-07 10:35:00
Witam,

piszę program związny z listą - chce jednak poszczególne opcje pokroju wyświetl wsadzić w osobne funkcje poza main.
Przy próbie wykonania tego na wskaźnikach, otrzymuje błąd :
1>c:xxx\main.cpp(70): error C2663: 'std::list<_Ty,_Ax>::push_back' : 2 overloads have no legal conversion for 'this' pointer


MV2010.

kod programu :

C/C++
#include <cstdio>
#include <list>
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>

using namespace std;

//---------------------------------------------------------------------------//

void wypelnij( list * wsk, int n );

int main()
{
    typedef list < int > defl;
    srand( time( 0 ) ); // ziarno do losowania.
    int n;
    cout << "Podaj dlugosc listy: ";
    cin >> n;
   
    int integer;
    defl lista;
    list * wsk;
    wsk = & lista;
   
   
    wypelnij( wsk, n );
   
    for( list < int >::iterator iter = lista.begin(); iter != lista.end(); ++iter ) //wyswietla po wbudowanym iteratorze listy
         cout << * iter << "\n";
   
    cout << "wcisnij enter\n";
    getch();
   
    lista.push_front( integer = rand() % 100 ); //dodaje dwa elementy na poczatek
    lista.push_front( integer = rand() % 100 );
   
    if( !lista.empty() ) // true gdy lista jest pusta
         lista.pop_back(); //usuwa ostatni element listy
   
    if( !lista.empty() )
         lista.pop_front(); //usuwa pierwszy element listy
   
    for( list < int >::iterator iter = lista.begin(); iter != lista.end(); ++iter ) //wyswietla po wbudowanym iteratorze listy
         cout << * iter << "\n";
   
    cout << "wcisnij enter\n";
    getch();
    cout << lista.size(); //zwraca liczbe elementow listy
   
   
    return 0;
}

//---------------------------------------------------
void wypelnij( list * listaa, int n ) {
   
   
    for( int i = 0; i < n; i++ )
         listaa->push_back( rand() % 100 ); //wypelnia liste
   
};


jak to zrobić, aby w funkcjach wypełniać, wyświetlać tę tablicę ? Jak zniwelować/naprawić ten błąd ?[/code]
P-77851
krzyk
» 2013-03-07 11:00:42
Nie możesz tworzyć wskaźnika na niezdefiniowany list.
C/C++
// tak
typedef list < int > defl;
void wypelnij( defl * wsk, int n );

// lub tak
void wypelnij( list < int > * wsk, int n );
P-77852
Piwniczne
Temat założony przez niniejszego użytkownika
» 2013-03-07 11:03:46
Działa !
Wielkie dzięki,

czyli rozumiem, ze w przyszłości - nie mogę tworzyć wskaźnika na ogólny typ LIST, lecz dopiero na konkretnie zdefiniowany np List<int> etc. nie wiedziałem tego - teraz wiem, dzięki jeszcze raz !

myśląc głebiej to całkiem logiczne, wskaźnik w końcu musi znać ilość zalokowanej pamięci by "przeskoczyć" na kolejną zmienną przy operacji ++, czego nie mógłby wykonać gdyby nie wiedział, czy są to elementy int, char, double czy inne etc. 
P-77854
« 1 »
  Strona 1 z 1