2017-09-21 9 views
0

임의의 값을 지정하고 무작위 값의 유일한 옵션은 uint32_t에 반환됩니다. 그 값을 uint64_t의 유니온 변수에 할당하려고합니다. 그래서 나는 다음과 같이 행동한다.유니온의 멤버 변수에 액세스 : uint64에 대해 선언되었지만 uint32에 무언가가 필요합니다. C++

#include <iostream> 
#include <random> 
#include <time.h>  /* time */ 

class A{ 
public: 
    A(){ 
     srand (time(NULL)); 
     A_ = rand(); // Also error 
     // What i want :: 
     // A_.A32 = rand(); 
    } 

    union A_{ 
     uint64_t A64_; 
     struct A32{ 
      uint32_t a32_1; 
      uint32_t a32_2; 
     }; 
    }; 
}; 

int main(){ 
    A a; 
} 
나는 아마도 같은 일부 uint32_t의 a32_1하는 값 또는 a32_2을 assigining 등 uint32_t에서 무언가를 사용할 수없는이 문제를 해결할 수있는 방법

?

g++ -std=c++14 -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -  MF"src/myNeo.d" -MT"src/myNeo.d" -o "src/myNeo.o" "../src/myNeo.cpp" 
../src/myNeo.cpp:57:6: error: expected unqualified-id 
+2

연합 앨리어싱 표준 C++에서 지원되지 않습니다 , 당신이 나는 그것이 익명 조합과 내 LLVM 컴파일러에서 작동하도록 얻을 수 있습니다 완전히 다른 접근 –

+0

@MM을 추천하지만, 오류가 불평 ++ g 것 이것은 표준 C++에서 지원되지 않는다고 말합니다. 그래서 실제로는 익명의 노동 조합이 아니라고 생각합니다. 그것은 불가능합니다. – user7865286

+1

다음은 원하는대로 할 수있는 몇 가지 방법입니다. https://ideone.com/isWCFA 왜 내가 원하는지 모르겠습니다. 확실히 나쁜 생각 인 것처럼 보이지만 구문을 보여줍니다. –

답변

1

A_ 귀하의 선언 형식이 아닌 변수를 정의 다음과 같이

오류 메시지입니다. 당신은, 예를 들면로 작성하는 변수가 필요합니다 반면에

#include <iostream> 
#include <random> 
#include <time.h> /* time */ 

class A { 
public: 
    A() { 
     srand (time(NULL)); 
     u.U32_1 = rand(); 
     u.U32_2 = ...; 
    } 

    union U { 
     uint64_t U64; 
     struct { 
      uint32_t U32_1; 
      uint32_t U32_2; 
     }; 
    }; 

    U u; 
}; 

int main() { 
    A a; 
} 

, 당신의 목표는 64 비트 정수에 32 비트 정수를 얻을 그냥, 당신은있는 그대로를 할당하고 컴파일러를 확장 할 수 있습니다 당신을 위해 값 :

#include <iostream> 
#include <random> 
#include <time.h> /* time */ 

class A { 
public: 
    A() { 
     srand (time(NULL)); 
     u = rand(); 
    } 

uint64_t u; 
};