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