如何将空指针转换为类数组
How to convert a void pointer to array of classes
我正在尝试将 void 指针转换为回调函数中的类数组,该函数仅支持 void 指针作为将参数传递给回调的一种方式。
class person
{
std::string name, age;
};
void callback (void *val)
{
for (int i = 0; i < 9; i++)
{
std::cout << (person [])val[i].name;
}
}
int main()
{
person p[10];
callback((void*)p);
}
我的目标是能够将类person
数组传递给回调,然后打印出数据,例如它们的名称和年龄。但是,编译不喜欢我正在做的事情,并抱怨error: request for member 'name' in 'val', which is of non-class type 'void*'
我该怎么做呢?
如果您希望能够恢复大小,则需要使用在运行时跟踪大小的容器。我建议使用 std::vector 而不是原始数组。
std::vector<person> p(10);
static_cast<std::vector<Person>*>(val);
下面的代码有效。但是你怎么知道数组的大小呢?
void callback(void* p)
{
Person* person = static_cast<Person*>(p);
for ( int i = 0; i < 10; ++i)
std::cout << person[i].age_m << "n";
}
您需要
将其转换为person *
。数组衰减为指针,因此将 void 指针强制转换为person
指针按预期工作。更清晰、更C++、更好的方法是:
std::cout << static_cast<person *>(val) [i].name;
C 方式也可以工作,但需要额外的括号,并且当您有适当的转换可用时,这是非常不安全/邪恶的:
std::cout << ((person *)val) [i].name;
相关文章:
- 如何在C++中将数组转换为矢量指针
- 将C++中的数组转换为字符串
- NLOHMANN 的 JSON 库将数组转换为结构向量
- 将 int 数组转换为 std::vector<int*>
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 将字节数组转换为带有字节序问题的指针
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 将字符数组转换为时间结构
- 将字节数组转换为多维数组
- 可视化 如何在C++中将字符数组转换为 FILE 类型
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- C++如何将字符数组转换为字节向量(向量<byte>)
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 无法将字符数组转换为包含 utf-8 字符的字符串
- 如何使用 C++将 2D RGB 数组转换为 dds 文件?
- 如何将字符串指针数组转换为字符串类型的智能指针向量?
- 将 int 数组转换为带有小数C++的双精度数组
- 使用 .data() 将字符数组转换为 std::string 不会转换整个数组
- 将字符数组转换为整数值