繁体   English   中英

C ++错误:“ double”之前的预期主表达式

[英]C++ Error: expected primary-expression before 'double'

我需要编写一个计算两个点之间的距离的类程序-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.hpp

#ifndef POINT_HPP
#define POINT_HPP
class Point {
private:
   double xCoord;
   double yCoord;

public:
   Point();
   Point(double x1, double y1);
   void setXCoord(double x1);
   void setYCoord(double y1);
   double getXCoord();
   double getYCoord();
   double distanceTo(const Point&);
};
#endif

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);
}
 p2.setXCoord(double); // <-- error p2.setYCoord(double); // <-- error 

double是类型,不是有效的实际参数名称。

用一个值或一个为double或至少可转换为double的变量调用这些函数。

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

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
}

你可以写得更简单

//set and get points
void LineSegment::setEnd1(Point p1) {
   this->p1 = p1;
}

void LineSegment::setEnd2(Point p2) {
   this->p2 = p2;
}

至少在Point类中,所有这些成员函数都应使用限定符const声明

double getXCoord() const;
double getYCoord() const;
double distanceTo(const Point&) const;
void LineSegment::setEnd1(Point p1) {
   p1.setXCoord(double);       // <-- error
   p1.setYCoord(double);       // <-- error
   setEnd1(p1);
}

LineSegment的set函数每个都使用Point类的一个参数。 因此,当给它一个Point类型的变量时,必须将其保存为point。

void Point::setXCoord(double x) {
   xCoord = x;
}

这部分代码是您想要做什么的模板。 而不是double类型,您要为p1和任何要调用的目标键入Point。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM