c ++错误:神秘的冲突声明错误

时间:2017-01-22 18:31:24

标签: c++

我仔细查看了我的代码,但不知道为什么会出现这个错误。

错误消息如下:

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

2 个答案:

答案 0 :(得分:2)

代码不完整......作为一个疯狂的猜测你还有一个TRAJ宏,它可以让你读取代码真正不可能的东西。

答案 1 :(得分:1)

traj.h你有

#define TRAJ

TRAJ定义为空的“字符串”,这导致预处理器替换:

traj TRAJ(dim);

traj (dim);

产生错误信息。

我想您应该将包含文件中的TRAJ重命名为TRAJ_H,然后才有效。