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

Zliczanie wektorów struktur: no match for 'operator='

Ostatnio zmodyfikowano 2012-05-28 07:52
Autor Wiadomość
shimano
Temat założony przez niniejszego użytkownika
Zliczanie wektorów struktur: no match for 'operator='
» 2012-05-23 23:17:08
Witam,

Znalazłem kilka odpowiedzi na to pytanie, ale kompletnie nie wiem, jak mam zastosować je u siebie. Posiadam kod:

C/C++
struct Krawedz {
private:
    int skad;
    int dokad;
    int waga;
   
public:
    void set( int _skad, int _dokad, int _waga ) {
        skad = _skad;
        dokad = _dokad;
        waga = _waga;
    }
    void pokaz() {
        cout << skad << " -> " << dokad << " (waga: " << waga << ")\n";
    }
};

class graf { /* długa, nieistotna zawartość */ }


void graf::rysujsuj() {
    cout << "Posiadam " << krawedzie.size() << " relacji. Oto one:\n"; // Posiadam x relacji. Oto one
    vector < int >::iterator it;
    for( it = krawedzie.begin(); it < krawedzie.end(); it++ ) { /* BŁĄD:
        no match for 'operator=' in 'it = (((std::vector<Krawedz, std::allocator<Krawedz> >*)((graf*)this)) + 240u)->std::vector<_Tp, _Alloc>::begin [with _Tp = Krawedz, _Alloc = std::allocator<Krawedz>]()' */
        cout << * it.pokaz();
    }
}

Z lekka dziwne dla mnie jest, że tutaj to nie działa, ale w innym miejscu dla innego typu (vector <int>) już identycznie pisany iterator działa.

Proszę o pomoc.
P-57253
ison
» 2012-05-23 23:45:49
C/C++
vector < int >::iterator it;
for( it = krawedzie.begin(); it < krawedzie.end(); it++ ) {
krawedzie to nie vector intów
P-57259
shimano
Temat założony przez niniejszego użytkownika
» 2012-05-24 00:16:05
Tyle wiadomo, ale jak to zwalczyć?
P-57260
ison
» 2012-05-24 00:20:28
vector < Krawedz >::iterator it;
P-57261
shimano
Temat założony przez niniejszego użytkownika
» 2012-05-24 00:23:41
No cóż, jakby to było takie proste...
Oczywiście przy czymś takim kompilator zwraca błąd, że nie ma operatora << przy wyświetlaniu wyników

C/C++
cout << * it.pokaz(); // albo co kolwiek innego z it, *it, czy krawedzie
P-57262
akwes
» 2012-05-24 00:33:50
@shimano

To jest proste, tylko Ty nie masz zielonego pojęcia o programowaniu.

Nie wiesz do czego służy cout, albo nie wiesz co to jest wartość zwracana przez funkcję.

cout << pokaz();

gdzie pokaz(); to void pokaz(); to błąd.

cout może Ci wyświetlić zmienne typu char*, std::string, char[], int, float... ale nie to co Ty chcesz.

Albo nie używaj cout << pokaz(), albo spraw aby pokaz zwracało char * lub std::string.
P-57263
shimano
Temat założony przez niniejszego użytkownika
» 2012-05-24 08:10:51
Udało mi się uzyskać zamierzony efekt przez

C/C++
vector < Krawedz >::iterator it;
for( it = krawedzie.begin(); it < krawedzie.end(); it++ ) {
    it->pokaz();
}

Jednakże nie wiem dlaczego akurat strzałka, ale o tym sobie doczytam, żeby zrozumieć.
P-57264
akwes
» 2012-05-24 12:51:01
@shimano,

nie chodzi tutaj o strzałkę :) Po prostu w drugiej wersji wywaliłeś "cout <<", co trzeba było zrobić :P
P-57277
« 1 » 2
  Strona 1 z 2 Następna strona