首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将空指针转换为类的数组

如何将空指针转换为类的数组
EN

Stack Overflow用户
提问于 2012-06-17 11:11:52
回答 3查看 2K关注 0票数 3

我正在尝试将空指针转换为回调函数中的类数组,该回调函数只支持空指针作为将参数传递给回调函数的一种方式。

代码语言:javascript
复制
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*'我该怎么做呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-17 12:27:36

如果您希望能够恢复大小,则需要使用在运行时跟踪大小的容器。我建议使用std::vector而不是原始数组。

代码语言:javascript
复制
std::vector<person> p(10);
static_cast<std::vector<Person>*>(val);
票数 4
EN

Stack Overflow用户

发布于 2012-06-17 11:18:11

您需要将其转换为person *。数组衰减为指针,因此将空指针转换为person指针的工作方式与预期的一样。更清晰、更多C++和更好的方法是:

代码语言:javascript
复制
std::cout << static_cast<person *>(val) [i].name;

C方法也可以,但需要额外的括号,并且当您有适当的强制转换时,这是非常不安全的/邪恶的:

代码语言:javascript
复制
std::cout << ((person *)val) [i].name;
票数 0
EN

Stack Overflow用户

发布于 2012-06-17 11:25:23

下面的代码可以正常工作。但是你怎么知道数组的大小呢?

代码语言:javascript
复制
void callback(void* p)
{

    Person* person = static_cast<Person*>(p);
    for ( int i = 0; i < 10; ++i)
        std::cout << person[i].age_m << "\n";
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11068660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档