[C++] Unia anonimowa - error: namespace-scope anonymous aggregates must be static|
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

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

AutorWiadomość
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
» 2014-04-12 16:24:45
Czy ty się pytasz dlaczego język C++ jest taki jaki jest?
P-108058
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
» 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
» 2014-04-13 12:06:27
Lub przenieś unię wewnątrz main()
P-108103
» 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
» 2014-04-13 14:32:02
P-108112
» 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 2Następna strona