[C++] Tablica i VS


(LonngerM) #1

Witam,

Piszę program który ma wykonywać działanie Sita Euklidesa mam jednak jeden problem. W domu piszę w Dev C++ i nie ma problemu - program się uruchamia i działa poprawnie. Jednak na zajęciach działamy na VS 2008 więc przeniosłem i wyskakują błędy:

error C2057: expected constant expression	

error C2466: cannot allocate an array of constant size 0

error C2133: 'TablicaLiczb' : unknown size

Początek kodu

#include "stdafx.h"

#include "iostream"


using namespace std;

int pocz; 

int kon;   


int main()

{

    cout << "Podaj dolny zakres poszukiwania liczb pierwszych \n"; 

    cin >> pocz; 

    cout << "Podaj gorny zakres poszukiwania liczb pierwszych \n";

    cin >> kon;


    bool TablicaLiczb[kon + 1]; // w tym miejscu wskazuje na te błędy

W Dev C++ działa wszystko ok, czemu tutaj nie?


(Fiołek) #2

Bo definiowanie tablicy o dynamicznym rozmiarze tak samo jak tej o stałym rozmiarze jest nielegalne w C++ - G++ ma to jako rozszerzenie, VC++ - nie. Użyj new[] + delete[] i będzie dobrze.


(Ryan) #3

Tutaj nawet nie o dynamiczny rozmiar chodzi. Zmienna kon nie ma zadeklarowanej wartości, więc dodanie do niej jedynki niespecjalnie mówi kompilatorowi o jaką wartość chodzi. Brak const jest tylko wisienką na torcie.


(LonngerM) #4

@Fiołek dzięki za pomoc, problem rozwiązany.

@Ryan - tak, nie była zdeklarowana, ale wartość takową otrzymywała od użytkownika, no ale problem rozwiązany:)


(Fiołek) #5

@ Ryan : Tak, tylko, że GCC potrafi to wykryć i automagicznie zmieni to na tablicę dynamiczną(tym bardziej, że widzi, że zmienna "kon" może być gdzieś zmieniana) - nie potrzebuje do tego ani początkowej wartości ani nawet consta.


(Ryan) #6

Z tą początkową wartością to ewidentnie mój błąd - przeoczyłem cina. :wink: