2

コンパイルしようとすると、これら2つのエラーが発生しました..

誰が何が悪いのか知っていますか?

#include するヘッダー ファイルが間違っているのではないかと考えていましたか? 次のコードとエラーのサンプル:

エラー:

Square.cpp:8: error: redefinition of ‘Square::Square(bool, Point*, std::string, int)’
Square.h:21: error: ‘Square::Square(bool, Point*, std::string, int)’ previously defined here
Square.cpp: In member function ‘Point Square::getCoord()’:
Square.cpp:22: error: expected primary-expression before ‘]’ token
Square.cpp: In member function ‘void Square::setCoord(Point*)’:
Square.cpp:32: error: expected primary-expression before ‘]’ token
Square.cpp:32: error: expected primary-expression before ‘]’ token

cpp ファイル

#include "Square.h"`
#include <cmath>
using namespace std;

Square::Square(bool containsWarpSpace, Point coord[], string shapeName, int vertPoint):ShapeTwoD(shapeName, containsWarpSpace) {

 vertPoint = vertPoint;
 coord[] = coord[];

}

int Square::getVertPoint()
{
    return vertPoint;
}

Point Square::getCoord()
{
    return coord[];
}

void Square::setVertPoint(int verticleP)
{
    vertPoint = verticleP;
}

void Square::setCoord(Point coord[])
{
    coord[] = coord[];
}

ヘッダ:

#include "ShapeTwoD.h"

class Square : public ShapeTwoD
{
    private:
        int vertPoint;
        Point coord[];

    public:
        //Accessor
        int getVertPoint();
        Point getCoord();

        //Mutator
        void setVertPoint(int vertP);
        void setCoord(Point coord[]);

        //virtual member
        virtual double computeArea(Point x, Point y);

        Square(bool containsWarpSpace, Point coord[], std::string shapeName = "Square", int vertPoint = 4):ShapeTwoD(shapeName, containsWarpSpace){}

};
4

3 に答える 3

4

ヘッダーで 1 回、実装ファイルで 1 回、コンストラクターを 2 回定義しています。ヘッダーでは、次のように宣言するだけです。

Square(bool containsWarpSpace,
       Point coord[],
       std::string shapeName = "Square",
       int vertPoint = 4);

coordの処理も修正coordする必要があります。

Point* coord;

と使用

Point* Square::getCoord()
{
    return coord;
}

this->coord = coord;

コンストラクターとsetCoord().

coordあなたの扱い方は私には奇妙で危険に思えますが、あなたが実際に何をしようとしているのかについての詳細な情報がなければ、具体的なアドバイスを与えるのは難しいことに注意してください. 通常、手動のメモリ/アレイ管理ではなく、標準コンテナーの使用を検討してください。

于 2013-10-27T15:38:25.897 に答える
2

コンパイラは問題を明確に示します。
コンストラクターをヘッダー ファイルで 1 回、cpp ファイルで 1 回定義しました。

また、正確に何をするつもりですか:

coord[] = coord[];

記述したコードのすべてのステートメントを理解する必要があります。考えてみてください、このステートメントは何をするつもりですか? そして、それをあなたが学んだ言語の文法に合わせてください。

于 2013-10-27T15:38:29.207 に答える
0

ソースファイル:

Square::Square(bool containsWarpSpace, Point coord[],
               string shapeName, int vertPoint)
   :ShapeTwoD(shapeName, containsWarpSpace)
{
    vertPoint = vertPoint;
    coord[] = coord[];
}

ヘッダー ファイル:

Square(bool containsWarpSpace, Point coord[], 
       std::string shapeName = "Square", int vertPoint = 4)
    :ShapeTwoD(shapeName, containsWarpSpace)
{}

同じ機能の 2 つの異なるバージョンのように見えます。
ヘッダー ファイル内のものは基本クラス コンストラクターを呼び出しますが、コンストラクターの本体にはコードがありません。

于 2013-10-27T16:40:49.570 に答える