C++ 错误:'double'之前的预期主表达式
C++ Error: expected primary-expression before 'double'
我需要编写一个计算两点之间距离的类程序-Point.cpp,以及另一个调用我的Point.cpp程序来计算两点之间的长度(基本上是与Point.cpp的距离)和斜率的类程序-LineSegment.cpp。我分别测试了我的Point.chpp,它运行良好。但是,当我一起运行所有内容(与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中的函数,但我的教科书没有告诉我如何从嵌套类中调用函数。如有任何指导,我们将不胜感激感谢大家抽出时间
线段.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);
}
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;
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());
}
void LineSegment::setEnd1(Point p1) {
p1.setXCoord(double); // <-- error
p1.setYCoord(double); // <-- error
setEnd1(p1);
}
LineSegment的集合函数每个都接受类Point的一个参数。所以当你给它一个Point类型的变量时,你必须把它保存为Point。
void Point::setXCoord(double x) {
xCoord = x;
}
这段代码是你想要做的事情的模板。你不需要键入double,而是需要为p1和任何目的地的名称键入Point。
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 提升精神:解析布尔表达式并简化为规范范式
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 使用正则表达式regex_search在字符串中查找字符串
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 概念中的cv限定符需要表达式参数列表
- 为什么constexpr的性能比正常表达式差
- 对于结构,表达式必须是可修改的ivalue
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 如何在满足常量表达式的同时将整数传递给指针,传递给 std::array<double、integer>?
- 如何修复此错误:二进制表达式的操作数无效("std::vector<double>"和"double")?
- 错误:数组大小表达式必须具有整型或无作用域枚举类型,而不是'double'
- 错误:表达式列表在初始化器[-fpermissive] Double Paycalc(p,yir,y)中被视为复合表达式
- main.cpp|45|error:"int" 和 "double" 之前的预期主表达式
- 为什么double v2=((double)51/4)%2是非法表达式ni c++
- 错误:修复“double”之前应为主表达式
- C++ 错误:'double'之前的预期主表达式
- 二进制表达式的操作数无效("double(*)(double"和"double")
- double类型静态类成员的常量表达式初始化项