2016-10-12 23 views
0

以下は4つのクラスです。私は基本的なC++構文について学びます。少年は私が使った他の言語よりもはるかに難しく、あまり寛容ではありません。私はメインクラス、ベースクラス "BaseArray"と2つのサブクラス "OrderedArray"と "UnorderedArray"を持っています。エラーC2011: 'クラス型の再定義 - 基本継承

MAIN.CPP

#include <iostream> 
#include "OrderedArray.cpp" 
#include "UnorderedArray.cpp" 

using namespace std; 

int main() { 


    system("PAUSE"); 
    return 0; 
} 

BaseArray.cpp

#include <iostream> 

using namespace std; 

class BaseArray { 
    public: 
     BaseArray::BaseArray() { 

     } 
}; 

OrderedArray.cpp

#include <iostream> 
#include "BaseArray.cpp" 

using namespace std; 

class OrderedArray : public BaseArray { 
    OrderedArray::OrderedArray() { 

    } 
}; 

UnorderedArray.cpp

#include <iostream> 
#include "BaseArray.cpp" 

using namespace std; 

class UnorderedArray : public BaseArray { 
    UnorderedArray::UnorderedArray() { 

    } 
}; 

私が受け取ったエラーは、他のスレッドをオンラインで偵察したことによるものです。私はそれがクラスの重複呼び出しと関係があるかもしれないと思う。正直言って、私は手がかりがありません。誰かが正しい方向に私を指すことができればそれはいいだろう、事前に感謝!私はmain.cppにの先頭に含まれていますが、私は、オブジェクトを作成し、後でサブクラスから関数を呼び出すためにそれらを必要とするのいずれかを削除することができ、このエラーを修正する

error C2011: 'BaseArray':'class' type redefinition 
error C2504: 'BaseArray':base class undefined 

。その後、

BaseArray.h

#ifndef BASEARRAY_H_GUARD  // include guard 
#define BASEARRAY_H_GUARD  // include guard 

           // no using namespace !! 
           // only includes needed for what's in the header 
class BaseArray { 
    public: 
     BaseArray(); 
}; 

#endif      // include guard 

そして、CPPにあなたのクラスの唯一の実装部分を残して:あなたは、ヘッダーであなたのベース・アレイを置くべき

+2

あなたはインクルードガードを使用する必要があります。 – drescherjm

+6

ほとんどの場合、cppファイルは含まれません。コードをヘッダファイルに移動するか、実装をインタフェースから分割する必要があります。 – NathanOliver

+0

[This](http:// stackoverflow。com/a/36983180/4342498)は、基本的に質問に答えますが、私はそれを騙しと呼ぶことはありません。 – NathanOliver

答えて

0

BaseArray.cpp

#include <iostream> 
#include "BaseArray.h" 

using namespace std; 

BaseArray::BaseArray() {  // no need class enclosing: the BaseArray:: prefix is sufficient 
} 

ザ・あなたが派生クラスに同じ原理を適用することができます。

OrderedArray.h

#ifndef BASEARRAY_H_GUARD  // include guard 
#define BASEARRAY_H_GUARD  // include guard 

#include "BaseArray.h"   // include only those that you need but all those that you need 

class OrderedArray : public BaseArray { // requires BaseArray 
    OrderedArray(); 
}; 

#endif 

OrderedArray.cpp

#include <iostream>   // include headers that are needed for class implementation 
#include "OrderedArray.h" // this should be self contained and provide 
          // evertyhing that is needed for the class itself 

using namespace std; 

OrderedArray::OrderedArray() { 
} 

そのあとに持っていますUnorderedArrayとfinで同じことをするあなたは、.cppの代わりに.hをインクルードするようにmain.cppを適応させる必要があります。そして、あなたは完了です。

最終的なコメント:あなたのcppソースコードファイルは、別々のコンパイルの準備が整いました。つまり、main.cppだけをコンパイルすることはできません。すべてのコードが含まれていることを期待しています.4つのcppファイルをコンパイルし、それらをリンクする必要があります。

関連する問題