簡體   English   中英

C ++中的錯誤:類構造函數的重新定義

[英]Error in C++ : redefinition of class constructor

我在嘗試編譯時遇到了這兩個錯誤。

有人知道怎么了嗎?

在想也許我#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){}

};

您將定義構造函數兩次,一次在標題中,一次在實現文件中。 在標題中,您只需要這樣聲明:

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處理方式對我來說似乎很奇怪而且很危險,但是如果您沒有進一步了解您實際上在做什么的信息,就很難給出具體的建議。 通常,考慮在手動內存/陣列管理上使用標准容器。

編譯器清楚地告訴您問題所在:
您兩次在頭文件中定義了構造函數,一次在cpp文件中定義了構造函數。

另外,您打算做什么?

coord[] = coord[];

您應該了解所編寫的每個代碼語句。 想一想,您打算將此語句做什么? 然后將其與您所學的語言語法相匹配。

源文件:

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)
{}

看起來像是同一功能的兩個不同版本。
頭文件中的那個調用基類構造函數,但構造函數的主體中沒有任何代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM