Greška u tutorijalu

Teme vezane za console/GUI programiranje u C/C++ jeziku
4 post(ov)a • Stranica: 1/1.

Greška u tutorijalu

PostPostao/la Tracer » 04 svi 2014, 21:13

Slučajno primjetih grešku u tutorijalu gore na forumu. Pošto se ne može tamo dodati post evo ovdje:
gagiD je napisao/la:Isto tako mozemo unijeti velicinu niza pa ga deklarisati:
cpp code
int n;
cout<<"Unesite velicinu niza"<<endl;
cin>>n;

int niz[n];

Jasno, ovo nije točno jer pri deklariranju statičkog polja njegov broj elemenata mora biti konstanta (neki konkretni broj) a ne n. Znači, npr.

int niz[10] a ne nikako int niz[n].

Ako se unaprijed ne zna veličina polja onda se radi njegova dinamička alokacija:

cpp code
int *niz; // pokazivač na budući niz
int n;
cout<<"Unesite velicinu niza"<<endl;
cin>>n;

niz = new int[n]; // dinamička alokacija niza od n elemenata
if(niz == NULL){
cout << "Nema dovoljno memorije za niz...";
return -1;
}
// niz[0], niz[1]... niz[n-1]...
...
delete[] niz; // dealokacija niza kada više nije potreban

No danas se ovo smatra već zastarijelim pa se mogu koristiti vektori kao što je u tutorijalu objašnjeno, ili čak pametni pokazivači (smart pointers). Npr.

cpp code
#include <memory>
using namespace std;
...
unique_ptr<int> niz(new int[n]); // dinamička alokacija niza od n elemenata
// niz[0], niz[1]... niz[n-1]...
...
// dealokacija nije potrebna

Re: Greška u tutorijalu

PostPostao/la gagiD » 04 svi 2014, 21:30

Tracer je napisao/la:Slučajno primjetih grešku u tutorijalu gore na forumu. Pošto se ne može tamo dodati post evo ovdje:
gagiD je napisao/la:Isto tako mozemo unijeti velicinu niza pa ga deklarisati:
cpp code
int n;
cout<<"Unesite velicinu niza"<<endl;
cin>>n;

int niz[n];

Jasno, ovo nije točno jer pri deklariranju statičkog polja njegov broj elemenata mora biti konstanta (neki konkretni broj) a ne n. Znači, npr.

int niz[10] a ne nikako int niz[n].

Hvala na ispravci.

Da, to misim da nije u standardu ali moj gcc to uredno guta za ostale komapjlere ne znam :)

I hvala za pojasnjenje dinamicke alokacije.

Re: Greška u tutorijalu

PostPostao/la Armin » 09 svi 2014, 20:52

Za standard C++11 to nije nužno greška.

Provjeri:
"Ne žalim što su drugi pokrali moje ideje. Žalim što nemaju svoje"
Nikola Tesla

Re: Greška u tutorijalu

PostPostao/la Tracer » 10 svi 2014, 07:40

To je uvijek greška jer broj elemenata statičkog polja mora biti konstanta. I taj link kojeg si naveo potvrđuje to isto. Samo što C++11 uvodi izraz constexpr pa se može napisati

constexpr int n = 10;
int p[n];

Međutim, constexpr varijabla mora biti unaprijed inicijalizirana tako da ju ne možeš kasnije učitati pa tek onda definirati veličinu polja. Uostalom, za ovakav pristup ti niti ne treba constexpr već može se upotrijebiti obični const.


4 post(ov)a • Stranica: 1/1.

Na mreži

Trenutno korisnika/ca: / i 1 gost.