[C++] Unia anonimowa - error: namespace-scope anonymous aggregates must be static|
Ostatnio zmodyfikowano 2014-04-14 12:37
kitsss Temat założony przez niniejszego użytkownika |
[C++] Unia anonimowa - error: namespace-scope anonymous aggregates must be static| » 2014-04-12 12:57:34 #include <iostream> #include <cstdlib>
using namespace std;
union { int g; char c; };
int main() { g = 3; system( "PAUSE" ); return 0; }
warning: anonymous type with no linkage used to declare variable '<anonymous union> <anonymous>' with linkage [enabled by default]|
error: namespace-scope anonymous aggregates must be static|
In function 'int main()':|
error: 'g' was not declared in this scope|
||=== Build finished: 2 errors, 1 warnings (0 minutes, 0 seconds) ===|
|
|
Monika90 |
» 2014-04-12 16:24:45 Czy ty się pytasz dlaczego język C++ jest taki jaki jest? |
|
kitsss Temat założony przez niniejszego użytkownika |
» 2014-04-13 10:53:39 Pytam się o to, czemu ten kod nie chce się skompilować.
Zrobiłem podobnie jak w tym kursie: http://cpp0x.pl/kursy/Kurs-C++/Unia-w-C++/314 |
|
Monika90 |
» 2014-04-13 11:55:50 Pytam się o to, czemu ten kod nie chce się skompilować. |
Nie chce się skompilować, bo jest błędny. Kompilator napisał dlaczego, powinno być: static union { int g; char c; };
|
|
alixir |
» 2014-04-13 12:06:27 Lub przenieś unię wewnątrz main() |
|
WaxerPL |
» 2014-04-13 13:18:40 @up Monika90 Co da Ci "static union" skoro ona nie ma nazwy? Po pierwsze unia powinna mieć nazwę. Po drugie jeśli odwołujesz się do zmiennej z unii, musisz użyć jej nazwy, operatora kropki i nazwy zmiennej. Wzór: #include <iostream> #include <cstdlib>
using namespace std;
union moja_unia { int g; char c; };
int main() {
moja_unia.g = 3;
cout << "Wartosc g = " << moja unia.g << endl; // To moja inwencja twórcza, obrazuje ci odnoszenie się do zmiennej g.
system("pause"); return 0; }
Czytaj to co wysyła Ci kompilator: "anonymous type with no linkage used to declare variable '<anonymous union> <anonymous>" anonymous - anonimowa, bez immienna, i to powinno Ci już dać do myślenia. Moja uwaga, lepiej używać jest struktur, ponieważ unia oczywiście może mieć wiele zmiennych, ale możesz się odwoływać tylko do jednej z nich. To znaczy: Przypiszesz 3 do zmiennej g, a następnie 'A' do zmiennej c. Teraz unia przechowuje tylko zmienną c, zmienna g straciła poprzednio zapisaną wartość. Natomiast struktura zapamiętuje wszystkie zmienne. P.S. "Podręcznikowo zrobiona" - gdzie ty wyczytałeś o takim dziwnym sposobie tworzenia unii? |
|
alixir |
» 2014-04-13 14:32:02 |
|
pekfos |
» 2014-04-13 14:32:30 Kłócisz się z ekspertem, to powinno Ci dać do myślenia. Po pierwsze unia powinna mieć nazwę. Po drugie jeśli odwołujesz się do zmiennej z unii, musisz użyć jej nazwy, operatora kropki i nazwy zmiennej. |
Po pierwsze: nie, po drugie - też nie. Moja uwaga, lepiej używać jest struktur, ponieważ unia oczywiście może mieć wiele zmiennych, ale możesz się odwoływać tylko do jednej z nich. To znaczy: Przypiszesz 3 do zmiennej g, a następnie 'A' do zmiennej c. Teraz unia przechowuje tylko zmienną c, zmienna g straciła poprzednio zapisaną wartość. Natomiast struktura zapamiętuje wszystkie zmienne. |
Ha, haha.. Temat dotyczy unii anonimowej bo potrzebne są jej właściwości. "Moja uwaga, lepiej użyj struktury", bo przecież robi zupełnie co innego - oczywiste, że trzeba jej użyć.. |
|
« 1 » 2 |