Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Unia anonimowa - error: namespace-scope anonymous aggregates must be static|

Ostatnio zmodyfikowano 2014-04-14 12:37
Autor Wiadomość
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
C/C++
#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) ===|

P-108054
Monika90
» 2014-04-12 16:24:45
Czy ty się pytasz dlaczego język C++ jest taki jaki jest?
P-108058
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
P-108097
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ć:
C/C++
static union
{
    int g;
    char c;
};
P-108102
alixir
» 2014-04-13 12:06:27
Lub przenieś unię wewnątrz main()
P-108103
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?


P-108106
alixir
» 2014-04-13 14:32:02
P-108112
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ć..
P-108113
« 1 » 2
  Strona 1 z 2 Następna strona