C++ C++;错误:在';双倍';

C++ C++;错误:在';双倍';,c++,C++,我需要编写一个类程序来计算两点之间的距离-Point.cpp,另一个类程序调用我的Point.cpp程序来计算两点之间的长度(基本上是距离Point.cpp)和斜率-LineSegment.cpp。我单独测试了Point.cpp,它运行正常。但当我将所有内容一起运行(与LineSegment.cpp一起运行)时,会收到以下错误消息: LineSegment.cpp: In member function ‘void LineSegment::setEnd1(Point)’: LineSegmen

我需要编写一个类程序来计算两点之间的距离-Point.cpp,另一个类程序调用我的Point.cpp程序来计算两点之间的长度(基本上是距离Point.cpp)和斜率-LineSegment.cpp。我单独测试了Point.cpp,它运行正常。但当我将所有内容一起运行(与LineSegment.cpp一起运行)时,会收到以下错误消息:

LineSegment.cpp: In member function ‘void LineSegment::setEnd1(Point)’:
LineSegment.cpp:31: error: expected primary-expression before ‘double’
LineSegment.cpp:32: error: expected primary-expression before ‘double’
LineSegment.cpp: In member function ‘void LineSegment::setEnd2(Point)’:
LineSegment.cpp:37: error: expected primary-expression before ‘double’
LineSegment.cpp:38: error: expected primary-expression before ‘double’
我的代码如下。我已经用注释标记了错误消息所指的4行(每次我用行号发布代码时,我都会收到一个建议的编辑来删除行号,所以这次我没有包括行号)

我猜我从Point.cpp调用函数是错误的,但我的教科书没有告诉我如何从嵌套类调用函数。任何指导都将不胜感激谢谢大家抽出时间

LineSegment.hpp

#ifndef LINESEGMENT_HPP
#define LINESEGMENT_HPP
#include "Point.hpp"

class LineSegment {
private:
   Point p1;
   Point p2;

public:
   LineSegment(Point, Point);
   void setEnd1(Point p1);
   void setEnd2(Point p2);
   Point getEnd1();
   Point getEnd2();
   double length();
   double slope();
};
#endif
LineSegment.cpp

#include <iostream>
#include <cmath>
#include "LineSegment.hpp"

//constructor
LineSegment::LineSegment(Point p1, Point p2) {
   setEnd1(p1);
   setEnd2(p2);
}

//set and get points
void LineSegment::setEnd1(Point p1) {
   p1.setXCoord(double);       // <-- error
   p1.setYCoord(double);       // <-- error
   setEnd1(p1);
}

void LineSegment::setEnd2(Point p2) {
   p2.setXCoord(double);       // <-- error
   p2.setYCoord(double);       // <-- error
   setEnd2(p2);
}

Point LineSegment::getEnd1() {
   return p1;
}

Point LineSegment::getEnd2() {
   return p2;
}

//calculations
double LineSegment::length() {
   return p1.distanceTo(p2);
}

double LineSegment::slope() {
   return(p2.getYCoord()-p1.getYCoord())/p2.getXCoord()-p1.getXCoord();
}
Point.cpp

#include <cmath>
#include <iostream>
#include "Point.hpp"

//default constructor
Point::Point() {
   xCoord = 0.0;
   yCoord = 0.0;
}

//constructor
Point::Point(double x, double y) {
   xCoord = x;
   yCoord = y;
}

//get and set functions
void Point::setXCoord(double x) {
   xCoord = x;
}

void Point::setYCoord(double y) {
  yCoord = y;
}

double Point::getXCoord() {
   return xCoord;
}

double Point::getYCoord() {
   return yCoord;
}

// calculate distance
double Point::distanceTo(const Point& p2) {
  double dx = p2.xCoord - xCoord;
  double dy = p2.yCoord - yCoord;
  return sqrt(dx * dx + dy * dy);
}
#包括
#包括
#包括“Point.hpp”
//默认构造函数
点::点(){
xCoord=0.0;
yCoord=0.0;
}
//建造师
点::点(双x,双y){
xCoord=x;
yCoord=y;
}
//获取和设置函数
无效点::setXCoord(双x){
xCoord=x;
}
空位点::setYCoord(双y){
yCoord=y;
}
双点::getXCoord(){
返回xCoord;
}
双点::getYCoord(){
回归和谐;
}
//计算距离
双点::距离(常数点和p2){
双dx=p2.xCoord-xCoord;
双dy=p2.yCoord-yCoord;
返回sqrt(dx*dx+dy*dy);
}
p2.setXCoord(双精度);//

p2.setXCoord(双精度);// 
double
是double类型的保留关键字,它不能作为参数传递给函数,您需要转发点类型的实际值

void LineSegment::setEnd1(Point p1) {
   p1.setXCoord(p1.getXCoord());   
   p1.setYCoord(p1.getYCoord());   
}

double
是double类型的保留关键字,它不能作为参数传递给函数,您需要转发点类型的实际值

void LineSegment::setEnd1(Point p1) {
   p1.setXCoord(p1.getXCoord());   
   p1.setYCoord(p1.getYCoord());   
}

double
是类型说明符,而不是对象。例如,为什么
setEnd1
会调用自身

看来你的意思是

//set and get points
void LineSegment::setEnd1(Point p1) {
   this->p1.setXCoord(p1.getXCoord());       // <-- error
   this->p1.setYCoord(pq.getYCoord());       // <-- error
}

void LineSegment::setEnd2(Point p2) {
   this->p2.setXCoord(p2.getXCoord());       // <-- error
   this->p2.setYCoord(p2.getXCoord());       // <-- error
}
至少在类点中,所有这些成员函数都应该用限定符const声明

double getXCoord() const;
double getYCoord() const;
double distanceTo(const Point&) const;

double
是类型说明符,而不是对象。例如,为什么
setEnd1
会调用自身

看来你的意思是

//set and get points
void LineSegment::setEnd1(Point p1) {
   this->p1.setXCoord(p1.getXCoord());       // <-- error
   this->p1.setYCoord(pq.getYCoord());       // <-- error
}

void LineSegment::setEnd2(Point p2) {
   this->p2.setXCoord(p2.getXCoord());       // <-- error
   this->p2.setYCoord(p2.getXCoord());       // <-- error
}
至少在类点中,所有这些成员函数都应该用限定符const声明

double getXCoord() const;
double getYCoord() const;
double distanceTo(const Point&) const;
这段代码是您要执行的操作的模板。您希望p1的类型为Point,而不是double,以及调用目标的任何类型


这段代码是您要执行的操作的模板。您希望p1和任何目的地的名称都输入Point,而不是键入double。

谢谢。很抱歉进行后续操作,但是当我将代码更改为此时,会出现错误“分段错误(内核转储)”。那么,我是否也做错了什么?@Jamie_Q您发布的setEnd1版本被递归调用(不要在最后再次调用setEnd1)。可能是这样,也可能是完全不同的东西,从你的帖子中无法得知。谢谢。很抱歉进行后续操作,但是当我将代码更改为此时,会出现错误“分段错误(内核转储)”。那么,我是否也做错了什么?@Jamie_Q您发布的setEnd1版本被递归调用(不要在最后再次调用setEnd1)。可能是这样,也可能是完全不同的东西,从你发布的内容中无法得知。
void LineSegment::setEnd1(Point p1) {
   p1.setXCoord(double);       // <-- error
   p1.setYCoord(double);       // <-- error
   setEnd1(p1);
}
void Point::setXCoord(double x) {
   xCoord = x;
}