我仔细查看了我的代码,但不知道为什么会出现这个错误。
错误消息如下:
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’
可以使用以下命令重现它
g++ -o a.out realvector.cc traj.cc main.cc
我的main.cc是
#include "realvector.h"
#include "traj.h"
using namespace std;
int main() {
unsigned int dim=1000;
traj TRAJ(dim);
return 1;
}
traj在traj.h中定义为
#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
构造函数在traj.cc中定义
#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();
}
知道为什么会出现这个错误?另外,定义r,v的方法是正确的吗? RealVector是一个家庭定义的类,其构造函数定义如下
#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;
}
将realvector.h作为
#ifndef REAL_VECTOR_H
#define REAL_VECTOR_H
#include <iostream>
class RealVector {
public:
RealVector();
RealVector(unsigned int n);
~RealVector();
int dim;
double* data;
};
#endif
答案 0 :(得分:2)
代码不完整......作为一个疯狂的猜测你还有一个TRAJ
宏,它可以让你读取代码真正不可能的东西。
答案 1 :(得分:1)
在traj.h
你有
#define TRAJ
将TRAJ
定义为空的“字符串”,这导致预处理器替换:
traj TRAJ(dim);
到
traj (dim);
产生错误信息。
我想您应该将包含文件中的TRAJ
重命名为TRAJ_H
,然后才有效。