2017-01-22 120 views
-2

我仔細查看了我的代碼,但不明白爲什麼會出現此錯誤。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 as

#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 
+1

當然你已經在main.cpp中包含了'traj.h'? –

+0

未發現問題http://ideone.com/PNPsY2 –

+0

@bsmile:你用'traj :: traj(unsigned int dim)初始化r,v,a:nt(dim),r(nt),v(nt) ,(nt){...'。但是,在這之前你應該可以使'traj :: traj(unsigned int dim,unsigned int nt)'。 – PrestonH

回答

1

traj.h你有

#define TRAJ

TRAJ定義爲一個空的 「串」,這導致該預處理器替換:

traj TRAJ(dim);

traj (dim);

它產生錯誤信息。

我想你應該在包含文件中將TRAJ重命名爲TRAJ_H然後才能正常工作。

+0

謝謝大家的幫助。這個功勞應該選擇grek40,Revolver_ocelot和6502來選擇答案,我需要拿起Al Bundy最清楚的答案。 – bsmile

+0

@bsmile如果我想寫這個作爲答案我會做到這一點。將第一個解決您問題的答案列爲可信。 – grek40

+0

@ grek40:我同意,在這個意義上說這有點不公平,但答案是幫助新手,因此更簡單和更清晰的答案更有幫助。這是在我發現了錯誤之後,我終於可以明白你的觀點了。 – bsmile

2

代碼不完整......作爲胡亂猜測你也有一個TRAJ宏使得閱讀代碼真的是不可能的。

+1

可能是包含後衛的空白定義:D – grek40

+0

@ grek40你很有意思! –