• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

lvalue required as left operand of assignment

0 głosów
1,113 wizyt
pytanie zadane 4 czerwca 2020 w C i C++ przez Qswarty1257 Nowicjusz (140 p.)
#include <iostream>

class Tablica {
public:
    Tablica(unsigned r) {
        rozmiar = r;
        tab = new int[rozmiar];
    }

    ~Tablica() {
        delete[] tab;
    }

    Tablica(const Tablica& inna) = delete;
    Tablica& operator=(const Tablica&) = delete;

    unsigned getRozmiar() const {
        return rozmiar;
    }

    //typ this: Tablica* const
    //typ tab: int*
    //zwracamy referencje na tab[idx]
     int& operator[](unsigned idx) {
        std::cout << "nieconstowy\n";
        return tab[idx];
     }

     //typ this: const Tablica* const
     int operator[](unsigned idx) const {
         std::cout << "CONST\n";
        return tab[idx];
     }
     void dodaj(int x){
        getRozmiar() = new int(x);
    for (unsigned i = tab.getRozmiar; i < x(); i++) {
        std::cout << i << ":\t " << tab[i] << '\n';
    }
     }

private:
    unsigned rozmiar;
    int* tab;
};

Witam, otóż mam problem ze swoją funkcją void dodaj (zaznaczona na biało). Podczas kompilacji wyskakuje mi komunikat "lvalue required as left operand of assignment", a ogólnie w tej funkcji void chodziło mi o dodanie nowego elementu x na końcu tablicy. Macie jakieś porady co poszło nie tak?

komentarz 4 czerwca 2020 przez tkz Nałogowiec (42,040 p.)
35 linia, co to jest?
komentarz 4 czerwca 2020 przez Qswarty1257 Nowicjusz (140 p.)
Chodziło mi o dopisanie kolejnych tablic przez alokacje pamięci
komentarz 4 czerwca 2020 przez tkz Nałogowiec (42,040 p.)

getRozmiar() = new int(x); żeby to miało jakikolwiek sens musiałbyś zwracać referencję, ale i tak do innej zmiennej. Ogólnie nie ma to sensu. http://www.cplusplus.com/reference/cstdlib/realloc/ możesz skorzystać z tego, albo memcpy, albo memmove.

 

1 odpowiedź

0 głosów
odpowiedź 4 czerwca 2020 przez TOM_CPP Pasjonat (22,640 p.)

Przepis na dodanie nowych elementów do tablicy utworzonej na stercie.

  1. Alokacja nowej tablicy z powiększonym rozmiarem
  2. Kopiowanie elementów ze starej do nowej
  3. Ustawienie dodanych elementów w tablicy na zero
  4. Ustawienie nowego rozmiaru
  5. Usunięcie starej tablicy ze sterty
  6. Przypisanie do wskaźnika tab nowej tablicy
void dodaj( int n )
{
    int *new_tab = new int[rozmiar+n]; // (1)
    
    std::copy(tab, &tab[rozmiar], new_tab); // (2)
    memset(&new_tab[rozmiar], 0, n*sizeof(int)); // (3)
    
    rozmiar += n; // (4)
    delete[] tab; // (5)
    tab = new_tab; // (6)    
}

 

Podobne pytania

0 głosów
1 odpowiedź 26,200 wizyt
0 głosów
0 odpowiedzi 756 wizyt
0 głosów
1 odpowiedź 463 wizyt

93,771 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,371 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...