2017-01-22 2 views
-2

Ich habe sorgfältig in meinen Code untersucht, aber nicht sehen, warum dieser Fehler herauskommt.C++ - Fehler: mysteriösen widersprüchlichen Deklaration Fehler

Die Fehlermeldung ist folgende:

main.cc: In function ‘int main()’: 
main.cc:12: error: conflicting declaration ‘traj dim’ 
main.cc:11: error: ‘dim’ has a previous declaration as ‘unsigned int dim’ 

und man kann es mit dem folgenden Befehl

g++ -o a.out realvector.cc traj.cc main.cc 

Mein main.cc ist

#include "realvector.h" 
#include "traj.h" 

using namespace std; 

int main() { 

    unsigned int dim=1000; 
    traj TRAJ(dim); 

    return 1; 
} 

traj in reproduzieren definiert traj.h als

#ifndef TRAJ 
#define TRAJ 


#include "realvector.h" 


class traj{ 
    public: 
    traj(unsigned int); 
    ~traj(); 
    void next(double &); 
    private: 
    unsigned int it,nt; // index, total array size 
    double dt;    // step time 
    RealVector r,v,a; 
}; 

#endif 

ist der Konstruktor in traj.cc definiert

#include "realvector.h" 
#include "traj.h" 

traj::traj(unsigned int dim) : nt(dim) { 
    RealVector r(nt),v(nt),a(nt); 
    it=0; 
} 


traj::~traj(){ 
    r.~RealVector(); 
} 

Jede Idee, warum dieser Fehler kommt? Auch, ist der Weg zu definieren, r, v, ein richtig? RealVector ist ein Haus definierte Klasse mit ihren Konstrukteuren definiert als die folgende

#include "realvector.h" 
using namespace std; 


RealVector::RealVector() {} 

RealVector::RealVector(unsigned int n) 
    : dim(n) { 
    data = new double[dim]; 
    for (int i=0; i<dim; i++) 
    data[i]=0; 
} 

RealVector::~RealVector(){ 
    delete[] data; 
} 

mit realvector.h als

#ifndef REAL_VECTOR_H 
#define REAL_VECTOR_H 
#include <iostream> 

class RealVector { 
public: 
    RealVector(); 
    RealVector(unsigned int n); 
    ~RealVector(); 
    int dim; 
    double* data; 
}; 

#endif 
+1

Sicher haben Sie 'traj.h' in main.cpp enthalten? –

+0

Kein Problem gefunden http://ideone.com/PNPSY2 –

+0

@bsmile: Sie initialisieren r, v, a mit 'traj :: traj (unsigned int dim): nt (dim), r (nt), v (nt) , a (nt) {... '. Aber bevor das funktioniert, sollten Sie wahrscheinlich 'traj :: traj (unsigned int dim, unsigned int nt)' machen. – PrestonH

Antwort

1

In traj.h Sie haben

#define TRAJ

die TRAJ als leere "string" definiert, und dies führt dazu durch den Präprozessor ersetzen:

traj TRAJ(dim);

zu

traj (dim);

, die die Fehlermeldung erzeugt.

Ich denke, Sie sollten TRAJ in der Include-Datei zu TRAJ_H umbenennen und dann funktioniert es.

+0

Vielen Dank für Ihre Hilfe. Dieser Kredit sollte auch an grek40, Revolver_ocelot und 6502 gehen, um die Antwort zu wählen, ich muss Al Bundys klarste holen. – bsmile

+0

@bsmile, wenn ich Lust hätte, dies als Antwort zu schreiben, hätte ich es getan. Es ist in Ordnung, die erste Antwort, die Ihr Problem anspricht, zu berücksichtigen. – grek40

+0

@ grek40: Dem stimme ich zu, in diesem Sinne ist es ein bisschen unfair, aber die Antworten sind Neulingen zu helfen, daher sind einfachere und klarere Antworten hilfreicher. Es ist, nachdem ich den Fehler herausgefunden habe, dass ich schließlich Ihre Punkte bekommen konnte. – bsmile

2

Der Code ist nicht vollständig ... als wilde Vermutung Sie haben auch eine TRAJ Makro, das das Lesen macht, was der Code wirklich unmöglich ist.

+1

Wahrscheinlich eine leere Definition für den Include-Guard: D – grek40

+0

@ grek40 Sie waren am Punkt! –

Verwandte Themen