2017-01-22 16 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’ 

と1次のコマンドでそれを再現することができ

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

私main.ccはtrajがで定義されている

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

using namespace std; 

int main() { 

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

    return 1; 
} 

です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、正しいものを定義する方法は?野生のはあなたもTRAJを持って推測としてRealVectorは

#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):nt(dim)、r(nt)、v(nt)でr、 、a(nt){...}。しかし、これが動作する前に 'traj :: traj(unsigned int dim、unsigned int nt)'を作成するべきです。 – PrestonH

答えて

1

あなたが持っている

プリプロセッサによって置き換える空 "の文字列" としてTRAJを定義し、これはこれにつながる#define TRAJ

traj TRAJ(dim);

traj (dim);

エラーメッセージが表示されます。

TRAJのインクルードファイルの名前をTRAJ_Hに変更してください。

+0

ご協力いただきありがとうございます。このクレジットは、grek40、Revolver_ocelot、6502にも回答を選択する必要があります。私はAl Bundyの最も明確なものを選ぶ必要があります。 – bsmile

+0

@bsmileこれを答えとして書くように感じたら、私はそれをしたでしょう。あなたの問題に対処している最初の答えを信用するのは大丈夫です。 – grek40

+0

@ grek40:その意味では、それはちょっと不公平ですが、答えは初心者の助けとなるため、よりシンプルで明確な回答がより役立ちます。私は最終的にあなたのポイントを得ることができた間違いを見つけた後です。 – bsmile

2

コードとしてrealvector.hで

#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; 
} 

次のように定義そのコンストラクタと一緒に家に定義されたクラスが...完全ではありませんされてコードが本当に不可能なものを読むことを可能にするマクロ。 traj.h

+1

おそらくインクルードガードのための空の定義:D – grek40

+0

@ grek40あなたはポイントがありました! –

関連する問題