我在尝试编译时遇到了这两个错误..
谁知道什么是错的?想到也许我#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){}
};
答案 0 :(得分:3)
您正在定义构造函数两次,一次在头文件中,一次在实现文件中。在标题中,您只需要声明它:
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
的方式对我来说似乎很奇怪和危险,但如果没有关于您实际尝试做什么的进一步信息,很难给出具体的建议。通常,考虑使用标准容器而不是手动内存/阵列管理。
答案 1 :(得分:2)
编译器清楚地告诉你问题:
您在头文件中将构造函数定义了两次,在cpp文件中定义了一次。
此外,您打算如何处理:
coord[] = coord[];
您应该了解您编写的每个代码语句。想一想,你打算做什么呢? &安培;然后将其与您学习的语言语法相匹配。
答案 2 :(得分: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)
{}
看起来是同一功能的两个不同版本 头文件中的那个调用基类构造函数,但在构造函数的主体中没有任何代码。