【发布时间】:2021-01-25 17:01:33
【问题描述】:
我必须在一个类中创建一个动态数组并将另一个类的对象存储在该数组中。然后使用数组访问其他类。共有 3 个类要存储在同一个数组中。
但是当我尝试访问 var 时,它不允许我... (obj.arr[0].a;) 这个。我尝试了很多方法,但找不到任何解决方案。请帮忙。
代码:
class T1
{
public:
int a = 1;
};
class T2
{
public:
int a = 2;
};
class T
{
public:
void *arr[];
};
int main()
{
T obj;
obj.arr[0] = new T1;
obj.arr[1] = new T2;
obj.arr[0].a;
}
【问题讨论】:
-
不要使用
void*的。一旦你做了那个转换,你就不再知道它指向什么了。看起来您可能需要std::variant或std::any。 -
我必须在自定义类中创建数组。我不能使用系统构建的类,如 std::variant 或 std::any 你的回答很受欢迎。
-
“我不能使用系统构建的类...” - 因为?我的意思是,我 不能,因为我的组织还没有使用符合 C++17 的工具链,并且不允许使用
boost。但是,出于好奇,你为什么不能呢? -
@muhammadomerirfan 在这种情况下,您需要建立自己的标记联合(基本上是
std::variant)。
标签: c++ class void-pointers