2017-03-23 4 views
0

Ich versuche ein Spiel mit GameObject zu erstellen, das aus Kacheln, Spielern, Feinden und Wänden besteht. Ich versuche, meine Klasse Character (Parent zu zwei weiteren Klassen Player und Enemy) in die Basisklasse GameObject zu bekommen. Ich erhalte den C2512-Fehler in der Character.cpp-Datei, wenn ich versuche, den Konstruktor für Zeichen zu erstellen. Kann jemand darauf hinweisen, was ich falsch machen könnte? Danke im Voraus.'GameObject': kein passender Standardkonstruktor verfügbar

Characters.h

#ifndef CHARACTERS_H 
#define CHARACTERS_H 

#include <cstdlib>  
#include <ctime>  /*cstdlib and ctime are used to help with the pseudo randomness for events*/ 
#include <cstdio> /*allows remove function*/ 
#include <iostream> 
#include <fstream> 
#include <sstream> 
#include <array> 
#include <string> 
#include <vector> 
#include "GameObject.h" 

using namespace std; 

class Character : public GameObject{ 
public: 
    Character(); 
    ~Character(); 
    virtual void attack(vector<Character *>&characters) = 0; 
    void set_values(string nam, int hp, int str, int mag) { 
     name = nam; 
     health = hp; 
     strength = str; 
     magic = mag; 
    }; 
    string name; 
    int health; 
    int strength; 
    int magic; 

}; 


#endif 

GameObject.h

#ifndef GAMEOBJECCT_H 
#define GAMEOBJECT_H 

#include "Direct3D.h" 
#include "Mesh.h" 
#include "InputController.h" 

class GameObject { 
protected: 
    Vector3 m_position; 
    float m_rotX, m_rotY, m_rotZ; 
    float m_scaleX, m_scaleY, m_scaleZ; //Not really needed for A1. 
    //Used for rendering 
    Matrix m_world; 
    Mesh* m_mesh; 
    Texture* m_texture; 
    Shader* m_shader; 
    InputController* m_input; //Might have enemies who react to player input. 

    float m_moveSpeed; 
    float m_rotateSpeed; 

public: 
    //Constructor 
    GameObject(Mesh* mesh, Shader* shader, InputController *input, Vector3 position, Texture* texture); 
    ~GameObject(); 
    void Update(float timestep); 
    void Render(Direct3D* renderer, Camera* cam); 

Characters.cpp

#include "Characters.h" 
#include <cstdlib>  
#include <ctime>  /*cstdlib and ctime are used to help with the pseudo randomness for events*/ 
#include <cstdio> /*allows remove function*/ 
#include <iostream> 
#include <fstream> 
#include <sstream> 
#include <array> 
#include <string> 
#include <vector> 
using namespace std; 

void Character::attack(vector<Character *>&characters) {}; 

Character::Character() { 

}; 
Character::~Character() {}; 

Antwort

0

Ihr GameObject sollte einen Standardkonstruktor haben (Konstruktor ohne Parameter).

Da in Character::Character(), Compiler wird einen Aufruf an GameObject Standardkonstruktor generieren.

Wenn Sie keinen Konstruktor für eine Klasse GameObject implementieren, generiert der Compiler einen leeren Standardkonstruktor dafür. Aber Sie haben einen Konstruktor für die Klasse GameObject implementiert, so dass der Compiler das nicht tut. Sie sollten selbst einen Standardkonstruktor angeben.

+0

nicht so aussieht Standardkonstruktor zu 'GameObject' ist die Absicht oder das sichere Verhalten hier. Ich denke, R Sahu ist auf das Geld als die Absicht .. – EyasSH

+0

Danke, dass geholfen hat. Ich habe jetzt einen noch einfacheren Fehler, der das ungelöste externe Symbol ist. Das ist normalerweise, wenn Sie etwas nicht richtig aufgenommen haben? – Zone

+0

@Zone Haben Sie Ihren neu hinzugefügten Standardkonstruktor implementiert? Denn wenn Sie es nicht tun, wird es sicherlich einen ungelösten Symbolfehler verursachen. –

1
Character::Character() {}; 

entspricht

Character::Character() : GameObject() {}; 

GameObject Da kein Standard-Konstruktor haben, der Compiler einen Fehler erzeugt. Wenn es keine vernünftigen Standardwerte für alle Argumente gibt, die vom benutzerdefinierten Konstruktor GameObject verwendet werden, sollten Sie Character ändern, um einen benutzerdefinierten Konstruktor zu haben, der alle Argumente akzeptiert, die zum Konstruieren eines GameObject benötigt werden.

Character(Mesh* mesh, 
      Shader* shader, 
      InputController *input, 
      Vector3 position, 
      Texture* texture); 

und setzen es als:

Character::Character(Mesh* mesh, 
        Shader* shader, 
        InputController *input, 
        Vector3 position, 
        Texture* texture) : GameObject(mesh, shader, input, position, texture) {} 
Verwandte Themen