• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
831 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,020 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,020 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ź 24,675 wizyt
0 głosów
0 odpowiedzi 632 wizyt
0 głosów
1 odpowiedź 279 wizyt

93,166 zapytań

142,177 odpowiedzi

321,946 komentarzy

62,495 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 688p. - dia-Chann
  2. 676p. - CC PL
  3. 675p. - Łukasz Piwowar
  4. 664p. - Marcin Putra
  5. 662p. - Łukasz Eckert
  6. 649p. - Michal Drewniak
  7. 641p. - rafalszastok
  8. 641p. - rucin93
  9. 629p. - Piotr Aleksandrowicz
  10. 629p. - Adrian Wieprzkowicz
  11. 621p. - Dawid128
  12. 612p. - Mikbac
  13. 611p. - ksalekk
  14. 606p. - Mariusz Fornal
  15. 602p. - Michał Telesz
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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...