错误:“双重”修复之前的预期主表达式?
Posted
技术标签:
【中文标题】错误:“双重”修复之前的预期主表达式?【英文标题】:error: expected primary-expression before ‘double’ fix? 【发布时间】:2015-11-04 05:22:07 【问题描述】:当我尝试在我的点类中调用我的 setXCoord 时,我正在处理我的任务以获取两个 x 和 y 坐标并在 Point.cpp 中获取它们的长度并在 LineSegment.cpp 中获取它们的斜率,我遇到了这些错误。
LineSegment.cpp:在成员函数‘void LineSegment::setEnd1(Point)’中: LineSegment.cpp:23: 错误:“double”之前的预期主表达式
void LineSegment::setEnd1(Point p1)
p1.setXCoord(double); // set first xcoordinate to p1
p1.setYCoord(double); // set first ycoordinate to p1
LineSegment.cpp:在成员函数‘double LineSegment::getEnd1()’中: LineSegment.cpp:35:错误:无法将“Point”转换为“double”作为回报
double LineSegment::getEnd1()
return p1; // return first set of points
我的 Point 在我的 Point.hpp 类 Point 中设置为双精度。
Point(double x = 0.0, double y = 0.0)
XCoord = x;
YCoord = y;
【问题讨论】:
double
是一个 type,您不能将它作为参数传递给函数。您应该传递一个实际值。
您的 getEnd1() 函数返回一个双精度值,但您返回的是 p1,它是一个点。你需要改变一个部分或另一个......
【参考方案1】:
问题在于您的setXCord()
和setYCord(
) 函数将double
类型值作为参数,因此您需要将double
类型值传递给它们。你所做的只是放置了你应该传入的值的变量类型。换句话说,你需要传递一个实际值而不是双精度值。
【讨论】:
【参考方案2】:主要问题(显然,正如编译器已经说过的那样)在这里并且仅在这里:
void LineSegment::setEnd1(Point p1)
p1.setXCoord(double); // set first xcoordinate to p1
p1.setYCoord(double); // set first ycoordinate to p1
在哪里发生了什么?你声明了一个void(Point)
类型的成员函数LineSegment::setEnd1
。现在,Point
类有一个名为setYCoord
的成员函数,它的类型不是你提供的。
现在,double
是表示双精度浮点基本类型的关键字。 C++ 语义规则不允许将关键字用作标识符,但有少数例外,即final
和override
。因此,调用Point::setXCoord()
的两行都是无效的。如果您尝试传递“类型参数”,请查看templates。
否则,您应该将适当的值传递给函数(在标准术语和编译器理论中也称为expression
)。
你没有提供上述功能的来源,所以我不能再为你做这件事了。
现在,第二个错误意味着编译器无法将whatever-is-the-type-of-p1
-here(它是Point
,不是吗?)转换为double。首先,这不符合逻辑。一个Point
包含两个 double
s,那么你如何神奇地将它转换成一个单个 double
?您可以对其进行一些操作,并返回该操作的结果。无论如何,如果你坚持这样做有任何逻辑,你可以声明一个隐式类型转换成员函数:
class Point
// ...
public:
// ...
operator double()
// Somehow transform a Point into a double and return that
;
我希望这对你有所启发!
【讨论】:
以上是关于错误:“双重”修复之前的预期主表达式?的主要内容,如果未能解决你的问题,请参考以下文章