gpt4 book ai didi

c++ - 访问 union 的成员变量 : declared for uint64, 但想要 uint32 中的内容。 C++

转载 作者:行者123 更新时间:2023-11-28 04:59:53 25 4
gpt4 key购买 nike

假设我想分配一些随机值,随机值的唯一选项在 uint32_t 中返回。我想将该值分配给 uint64_t 中的某个 union 变量。所以我做了以下,这是行不通的。

#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 中使用某些东西的问题,例如将一些 uint32_t 值分配给 a32_1 或 a32_2?

错误信息如下:

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

最佳答案

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;
}

另一方面,如果您的目标只是将 32 位整数转换为 64 位整数,您可以按原样分配它并让编译器为您扩展该值:

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

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

uint64_t u;
};

关于c++ - 访问 union 的成员变量 : declared for uint64, 但想要 uint32 中的内容。 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46334152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com