使用空指针数组时的C++错误

使用空指针数组时的C++错误,c++,pointers,void,C++,Pointers,Void,我想在GameObject类中有一个从类继承的对象向量和一个模板方法,该方法将向向量中添加模板类型的新对象 但我想有可能使用构造函数,参数类型未知,所以我想使用void pointers数组来实现这一点,但我有一个错误,即: 以非零状态退出 代码如下: #include <iostream> #include <string> #include <vector> class A { public: virtual void whatever() {

我想在GameObject类中有一个从类继承的对象向量和一个模板方法,该方法将向向量中添加模板类型的新对象

但我想有可能使用构造函数,参数类型未知,所以我想使用void pointers数组来实现这一点,但我有一个错误,即:

以非零状态退出

代码如下:

#include <iostream>
#include <string>
#include <vector>

class A
{
public:

    virtual void whatever() { std::cout << "okay\n"; }
};

class B : public A
{
public:
    float a;
    std::string b;
    int c;

    void print()
    {
        std::cout << "a,b,c values: " << a << ", " << b << ", " << c << std::endl;
    }

    B(void * parameters[])
    {
        this->a = *(static_cast<float*>(parameters[0]));   
        this->b = *(static_cast<std::string*>(parameters[0]));
        this->c = *(static_cast<int*>(parameters[0]));
    }
};

class GameObject
{
public:
    std::vector<A*> components{};

    template<class T>
    void AddComponent(void * parameters[])
    {
        auto t = new T(parameters);
        components.push_back(t);
    }
};

int main()
{
    float f = 2524.218f;
    std::string s = "str";
    int i = 4214;

    auto g = new GameObject;

    void* ptr[3];

    ptr[0] = &f;
    ptr[1] = &s;
    ptr[2] = &i;

    g->AddComponent<B>(ptr);
    static_cast<B*>(g->components[0])->print();
}
你能告诉我问题是什么吗?如果可能的话,请更正代码

    this->a = *(static_cast<float*>(parameters[0]));   
    this->b = *(static_cast<std::string*>(parameters[0]));
    this->c = *(static_cast<int*>(parameters[0]));
你是说:

    this->a = *(static_cast<float*>(parameters[0]));   
    this->b = *(static_cast<std::string*>(parameters[1]));
    this->c = *(static_cast<int*>(parameters[2]));

也就是说,使用不同的数组索引。

您真的打算将相同的数组项分配给3个不同的变量吗?这似乎是一个糟糕的设计选择。参数[0]不能同时是指向浮点的指针、指向int的指针和指向std::string的指针。想一想,当它不是字符串时,尝试将其作为字符串取消引用会有什么效果。并了解。