Aktualizacja wielu komórek na raz

Odpowiedz Nowy wątek
2011-09-05 21:42
wbp
0

Witam!

Mam małą aplikację, którą zamierzam przenieść na Windowsa. Przy kompilacji kodu namierzyłem pewną ciekawostkę, mianowicie w MinGW:

 int tab[4];
tab = {0,1,2,3};

nie śmiga. Problem w tym, że chciałbym tak zmodyfikować kod by te dwie linijki były nie zmienione i nie chciałbym komplikować sprawy wyrafinowanymi bibliotekami.

Macie jakieś pomysły?

Podkreślę, że chcę aktualizować stan tablicy.
Gdy napiszę to w jednej linii, jednocześnie deklaruję tablicę, a ja chcę dokonać zmian w już istniejącej.

Pozostało 580 znaków

2011-09-05 21:48
Kumashiro
0

Czyli chcesz poprawić błąd bez zmieniania kodu, w którym jest błąd... Dobre. W takim razie może spróbuj zmodyfikować kod kompilatora żeby nie sypał błędem w takim przypadku i bez zająknięcia aktualizował "komurki".

Pozostało 580 znaków

2011-09-05 21:57
wbp
0

Chcę uniknąć rozpisywania. Podany kod jest przykładem, a nie moim programem. Aż tak tyci to on nie jest :D Ale jak już nie będzie sposobu to co mi pozostanie... mus to mus.

Edit: Co do kompilatora pomysł całkiem dobry acz wydaje mi się, że rozpisanie było by prostsze więc się nie kalkuluję

edytowany 1x, ostatnio: wbp, 2011-09-05 22:05

Pozostało 580 znaków

2011-09-05 22:04
Kumashiro
0

Ależ rozpisuj się! O to przecież chodzi, żebyś dokładnie wyjaśnił o co Ci chodzi. Chcesz wpisać do tablicy stałe w jednej linijce kodu? Masz te dane w innych zmiennych? Chcesz wymusić nieprawidłowe przypisanie?
Podaj przykład, albo lepiej napisz co chcesz osiągnąć.

Pozostało 580 znaków

2011-09-05 22:05
0

Spróbuj skompilować z -std=c++0x. Jeżeli nie działa to użyj najnowszej wersji mingw. Jeżeli nie działa spróbuj VS. Jeżeli nie działa zmień kod.

c++0x też czegoś takiego nie wspiera, agregaty można używać tylko podczas inicjalizacji (chyba, że się mylę) - byku_guzio 2011-09-05 22:54
Kompilując ten kod bez dodatkowych opcji na gcc 4.4.5 - warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x, więc pewnie wspiera. Nie chce mi się zaglądać do standardu (czyta się go podobnie jak książkę telefoniczną, tylko jest mniej bohaterów). - Zjarek 2011-09-05 22:58
Z tego źródła, wynika tylko ta kwestia przy inicjalizacji, tworzeniu zmiennych tymczasowych, nie ma nic o takim przypisaniu. Co innego, gdyby tab było jakimś obiektem, a nie tablicą - byku_guzio 2011-09-05 23:32

Pozostało 580 znaków

2011-09-05 22:35
0
wbp napisał(a)
int tab[4];
tab = {0,1,2,3};

Może o czymś nie wiem, ale to jest niepoprawne zarówno w C jak i C++, W obydwu językach można za to tak:

 int tab[4] = {0, 1, 2, 3};

"(...) otherwise, the behavior is undefined".
To jest poprawne w nowym standardzie C++ (0b) - Zjarek 2011-09-05 22:55
Nie, nie ma czegoś takiego. Gcc z przełącznikiem -std=c++0x wyrzuca błąd, a standard mówi tylko o inicjalizacji. Potem to już jest przypisanie. - Endrju 2011-09-05 23:22
Znalazłem, to był bug GCC, naprawili w 4.6. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44045 . Sprawdziłbym -std=gnu++0x jak bardzo chcesz skompilować bez modyfikacji. Ale używając własnych operatorów przypisania lub skalarów taka konstrukcja jest dozwolona przez standard - Zjarek 2011-09-05 23:47
Nie rozumiem Cie. Mam gcc 4.6.1, takie coś nie działa. Może gdyby przeciążyć operator= dla jakiejś klasy z argumentem std::initializer_list<T> to by zadziałało, ale mówimy o normalnych tablicach, wiec nie można tego zrobić. - Endrju 2011-09-06 00:23
Działanie tego było bugiem. Szczerze mówiąc bug w kompilatorze to jest ostatnia rzecz której się spodziewam, dlatego trochę namieszałem. - Zjarek 2011-09-06 00:32
Ah, już rozumiem. Ja też troszkę namieszałem. :-P - Endrju 2011-09-06 00:53

Pozostało 580 znaków

2011-09-05 22:47
fdsgsdg
0

z tego co rozumiem masz już gotowe dane w postaci

{1, 2, 3}

i z jakiegoś powodu nie chcesz ich przypisywać od razu tylko podczas działania programu a jednocześnie uniknąć pisania

tab[1] = 1;
tab[2] = 2;
tab[3] = 3;

jeśli dobrze rozumiem to najprościej wkleić te dane w tym formacie do jakiegoś pliku i napisać prosty parser tego pliku
c++ znam tylko pasywnie (przepisywanie kodu z niego na inny język) także nie zarzucę kodem, ale w większości języków to góra 6 linii kodu więc roboty nie ma wiele

trololol. - Rev 2011-09-05 23:05

Pozostało 580 znaków

2011-09-06 01:41
anty_fdsgsdg
0
fdsgsdg napisał(a)

c++ znam tylko pasywnie
czytając twoją wypowiedź można odnieść wrażenie, że jednak w ogóle nie znasz.

Pozostało 580 znaków

2011-09-06 07:09
wbp
0

Ten motyw z bugiem jest bardzo sensowny. Mam wersję 4.4.3.

Dane są generowane podczas działania programu. Spróbuje to jakoś rozpisać. Dzięki za pomoc!

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0