0
我想在GameObject
类中有一个从A
类继承的对象的向量,还有一个模板方法,它将向模板类型添加模板类型的新对象。使用void指针数组时出现C++错误
但我想有使用构造,未知类型的参数的可能性,所以我想用空指针数组来做到这一点,但我有一个错误说:
退出非零状态
下面是代码:
#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();
}
你能告诉我是什么问题,如果有可能,更正代码?
你真的想把相同的数组项分配给3个不同的变量吗?这似乎是一个糟糕的设计选择。 –
'parameters [0]'不能同时指向'float'指针,指向'int'的指针和指向'std :: string'的指针。想想当它不是一个字符串时,试图将它解引用为一个字符串会做什么。并学习[*未定义的行为*](http://en.cppreference.com/w/cpp/language/ub)。 –