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
Sicher haben Sie 'traj.h' in main.cpp enthalten? –
Kein Problem gefunden http://ideone.com/PNPSY2 –
@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