• 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

Object Storage Arubacloud
0 głosów
745 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,000 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,000 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ź 23,958 wizyt
0 głosów
0 odpowiedzi 605 wizyt
0 głosów
1 odpowiedź 232 wizyt

92,584 zapytań

141,434 odpowiedzi

319,671 komentarzy

61,968 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...