W C++ Chciałbym przydzielić stały rozmiar (ale rozmiar określony w czasie wykonywania) std :: vector, a następnie napisać do elementów w tym wektorze. Jest to kod używam:Utwórz stały rozmiar std :: vector i napisz do elementów
int b = 30;
const std::vector<int> test(b);
int &a = test[3];
Jednak to daje mi kompilator (MSVC 2010 Pro) błąd:
error C2440: 'initializing' : cannot convert from 'const int' to 'int &'. Conversion loses qualifiers.
Moje rozumienie const jest to, że sprawia, że wszystkie zmienne członkowskich stała klasy. Na przykład, następujący działa dobrze:
class myvec
{
public:
myvec(int num) : ptr_m(new int[num]) {};
~myvec() { delete ptr_m; }
void resize(int num) { delete ptr_m; ptr_m = new int[num]; }
int & operator[] (int i) const { return ptr_m[i]; }
int *ptr_m;
};
const myvec test(30);
int &a = test[3]; // This is fine, as desired
test.resize(10); // Error here, as expected
Wydaje się zatem, że std :: vector propaguje const-ności pojemnika do elementów wektora, co wydaje się dziwne, bo gdybym chciał elementy do być const Użyłbym std::vector<const int>
. To dlatego uderza mnie jako wadę std :: vector.
W każdym razie, w jaki sposób mogę utworzyć std :: vector, którego rozmiar nie może zostać zmieniony po konstrukcji, ale do którego elementów można zapisać?
Najpierw utwórz zmienną "a", a następnie wykonaj ostatnią linię. –
@GamesBrainiac: Wtedy 'a' nie jest odniesieniem. Błąd jest spowodowany posiadaniem zapisywalnego odniesienia do elementu w wektorze, który jest dokładnie tym, czego chcę. – user664303
Powinieneś spróbować użyć 'std :: vector' ... zobacz, co się stanie –