Ich möchte in GameObject
Klasse einen Vektor von Objekten haben, die von A
Klasse erbt, und eine Vorlage-Methode, die neue Objekte des Schablonentyps zum Vektor hinzufügen wird.C++ - Fehler bei der Verwendung von Array von void-Zeigern
Aber ich möchte die Möglichkeit haben Konstrukteure verwenden, mit den Parametern der unbekannten Art, so möchte ich void-Zeiger-Array verwenden, das zu tun, aber ich habe einen Fehler zu sagen:
mit Nicht-Null verlassen
Status
Hier ist der Code:
#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();
}
können Sie mir sagen, was das Problem ist und wenn es möglich ist, korrigieren Sie den Code?
Wollten Sie wirklich den gleichen Array-Eintrag 3 verschiedenen Variablen zuweisen? Dies scheint eine schreckliche Designwahl zu sein. –
'Parameter [0]' kann nicht gleichzeitig ein Zeiger auf ein 'float', ein Zeiger auf ein' int' und ein Zeiger auf 'std :: string' sein. Denken Sie darüber nach, was Sie versuchen, es als String zu dereferenzieren, wenn es keine Zeichenfolge ist. Und lerne über [* undefined behaviour *] (http://en.cppreference.com/w/cpp/language/ub). –