• 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

HackNation - ogólnopolski hackathon
0 głosów
1,002 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ź 25,713 wizyt
0 głosów
0 odpowiedzi 706 wizyt
0 głosów
1 odpowiedź 387 wizyt

93,626 zapytań

142,549 odpowiedzi

323,034 komentarzy

63,129 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1210p. - dia-Chann
  2. 1197p. - DziarnowskiJ
  3. 1177p. - Łukasz Piwowar
  4. 1172p. - CC PL
  5. 1161p. - Maurycy W
  6. 1141p. - Adrian Wieprzkowicz
  7. 1138p. - raydeal
  8. 1134p. - Tomasz Bielak
  9. 1116p. - rucin93
  10. 1101p. - robwarsz
  11. 1100p. - Mariusz Fornal
  12. 1024p. - ssynowiec
  13. 885p. - Dominik Łempicki (kapitan)
  14. 847p. - Grzegorz Aleksander Klementowski
  15. 838p. - Wojciech Malicki
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...