2016-04-16 3 views
-1

Ich habe nur ein einfaches Programm, wo dice.cpp und dice.h durch game.cpp laufen bis jetzt berechnen Sie einfach die Summe von zwei Würfelwürfen.C++ Einfaches Klassenprogramm wird nicht kompiliert. Habe ich die Include-Header durcheinander gebracht? 'Fehler Neudefinition einer Klasse'

Wenn ich versuche, das Programm anscheinend zu starten, ich definiere die Würfelklasse neu, das ist, was mein Fehler mir sagt.

Hier sind meine drei Dateien.

game.cpp

#include "Dice.h" 
#include <iostream> 

using namespace std; 

int main() 
{ int sum; 
    Dice dice1; 
    Dice dice2; 
    dice1.roll(); 
    dice2.roll(); 
    sum = dice1.getFace() + dice2.getFace(); 
    cout << sum; 

    return 0; 

} 

dice.cpp

#ifndef DICE_H 
#define DICE_H 
#include "Dice.h" 
using namespace std; 
// g++ -c Dice.cpp 

// default constructor: initializes the face of a new 
// Dice object to 1 

Dice::Dice() 
{ 
    //cout << "Default constructor " << endl; 
    face = 1; // not redeclaring the data member face 
} 


// specific constructor: initializes the face of a new 
// Dice object to newFace 
// Pre-condition: newFace is a valid number 
// call setFace function inside Dice(int newFace) 
Dice::Dice(int newFace) 
{ 
    //cout << "Specific constructor " << endl; 
    setFace(newFace); 
} 


// Sets face to the value in otherFace 
// Pre-condition: otherFace is valid 
void Dice::setFace(int otherFace) 
{ 
    assert(otherFace >= 1 && otherFace <= 6); 
    face = otherFace; 
} 


// Changes the value of face to a random value between 1 and 6 
void Dice::roll() 
{ 
    face = rand()%6 +1; 
} 

// returns the face value of a Dice object 
int Dice::getFace() const 
{ 
    return face; 
} 

    // displays the face value of a Dice object 
void Dice::display() const 
{ 
    cout << "This dice has " << face << " on top" << endl; 
} 
#endif 

Dice.h

#include <iostream> 
#include <cassert> 
#include <cstdlib> 
#include <ctime> 

// definition of class Dice 
class Dice 
{ 
    private: 

    int face; // can only take values between 1 and 6 

    public: 

    // default constructor: initializes the face of a new 
    // Dice object to 1 
    Dice(); 

    // specific constructor: initializes the face of a new 
    // Dice object to newFace 
    // Pre-condition: newFace is a valid number 
    // call setFace function inside Dice(int newFace) 
    Dice(int newFace); 

    // Sets face to the value in otherFace 
    // Pre-condition: otherFace is valid 
    void setFace(int otherFace); 

    // Changes the value of face to a random value between 1 and 6 
    void roll(); 

    // returns the face value of a Dice object 
    int getFace() const; 

    // displays the face value of a Dice object 
    void display() const; 

}; 

HERE IS A PHOTO OF THE ERROR

+2

Warum Haben Sie Kopfzeile Wachen in der * source * Datei, aber keine in der eigentlichen Header-Datei? –

+0

'** Klasse Dice **'? Was ist mit der '**'? – Unimportant

+0

Auch, bitte bearbeiten Sie Ihre Frage, um die * tatsächlichen * Fehler, vollständig, unbearbeitet, einschließlich möglicher Informationsnotizen –

Antwort

0

Der Code, den Sie zeigen, liegt. Der Fehler scheint zu sagen, dass game.cppDice.h enthält, und dass Dice.hDice.cpp enthält, das Dice.h enthält. So ist Ihre Dice.h Header-Datei zweimal enthalten, und ohne header include guards in der Header-Datei wird die Klasse zweimal definiert.

Einfache Lösung? Enthalten Sie nicht die Quelle Datei. Sie sollten Header-Include-Wächter in der Header-Datei jedoch noch haben.

2

In „dice.cpp“ Datei, entfernen Sie die dritte Zeile, die sagt: „# include‚dice.h‘. Sie definieren bereits die Würfel Klasse und somit müssen Sie nicht die # include-Anweisung