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

Błąd w kodzie

VPS Starter Arubacloud
0 głosów
148 wizyt
pytanie zadane 5 marca 2021 w C i C++ przez Krystian000 Nowicjusz (150 p.)
#include <iostream>
#include <algorithm>

template<int Index = 0>
void WczytajLiczby(int* tablica) { 
        std::cin >> tablica[Index];
        WczytajLiczby<Index + 1>(tablica);
}
template<>
void WczytajLiczby<9>(int* tablica) {
        std::cin >> tablica[9];
}

int main() {
        int tablica[11];
        std::cout << "Podaj 10 liczb (po podaniu kazdej naciskaj klawisz Enter)\n";
        WczytajLiczby(tablica);
        std::cout << "Wprowadziles liczby: ";
        int suma{ 0 };
        std::for_each(tablica, &tablica[10], [&suma](const int& n) -> void {
                std::cout << ((suma += n), n) << ' ';
        });
        std::cout << "\n";
        std::cout << "A suma tych liczb wynosi: " << suma << std::endl;
        return 0;
}

Witam tak jak w tytule przy pisaniu kompilowaniu kodu w devie wyskakuje mi błąd jako, że jestem amatorem w pisaniu to nie mam pojęcia o co tu chodzi i proszę o pomoc

komentarz 5 marca 2021 przez adrian17 Ekspert (344,100 p.)
A na boku... skąd taki kod? Bo wygląda jak mega dziwne podręcznikowe przekombinowanie :D Z tą specjalizacją szablonu, std::for_each i "sprytnym" użyciem operatora `,`.

3 odpowiedzi

0 głosów
odpowiedź 5 marca 2021 przez adrian17 Ekspert (344,100 p.)
wybrane 5 marca 2021 przez Krystian000
 
Najlepsza
Dokładnie to co pierwszy komunikat o błędzie mówi - używasz ficzery z C++11, ale używasz też edytor i kompilator tak przestarzałe że nie mają domyślnie włączonego trybu C++11 lub nowszego - musisz w opcjach ustawić flagę -std=c++11 (lub przerzucić się na coś współcześniejszego).
+1 głos
odpowiedź 5 marca 2021 przez TOM_CPP Pasjonat (22,640 p.)

Nie używaj rekurencyjnych szablonów w połączeniu ze wskaźnikami, plus magiczna liczba 9, która psuje cały sens ich używania. Jak będziesz chciał użyć tablicy o innym rozmiarze to za każdym razem będziesz musiał ją zmieniać. Po za tym jaki jest sens użycia szablonów w taki sposób, do czego ma to służyć? O wiele bardziej uniwersalne i prostsze jest zastosowanie tutaj zwykłego szablonu.

template< typename T , istream& in = cin >
void loadTable( T& container )
{
    for( auto& element : container ) in >> element;
}

 

0 głosów
odpowiedź 5 marca 2021 przez raxonpc Użytkownik (560 p.)
Nie używaj for-each, tylko użyj zwykłego range-based for loop...
zrobi to samo, a składnia jest dużo czystsza
i zmień IDE błagam
komentarz 5 marca 2021 przez Szymczak_7 Obywatel (1,860 p.)
Prawdopodobnie nie wie co to jest range-based for loop
komentarz 5 marca 2021 przez NewEraOfPeace Gaduła (4,790 p.)

@raxonpc,

nie widzę żadnego problemu z for each? W modern C++ jest wręcz zalecane używanie algorytmów nad zwyczajnym pętlami, also można tam użyć begin i end.
Wątpliwe jedynie jest tutaj "hackowanie" comma operator, robienie dwóch operacji w jednej.

komentarz 6 marca 2021 przez raxonpc Użytkownik (560 p.)
for-each się używało przed c++11, kiedy nie było range-based for loop. One robią dokładnie to samo, a składniowo jest dużo lepszy ten drugi
komentarz 6 marca 2021 przez NewEraOfPeace Gaduła (4,790 p.)
Nie robią dokładnie tego samego i for each jest bardziej ekspresywny.

Podobne pytania

0 głosów
2 odpowiedzi 112 wizyt
pytanie zadane 14 lutego 2023 w C i C++ przez piotr_domanski Bywalec (2,040 p.)
+1 głos
1 odpowiedź 188 wizyt
pytanie zadane 6 października 2021 w C i C++ przez <młody_programista> Początkujący (450 p.)
0 głosów
1 odpowiedź 225 wizyt
pytanie zadane 25 kwietnia 2020 w C i C++ przez jakub55 Nowicjusz (150 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...