当我尝试在我的点类中调用我的setXCoord时,我正在处理我的任务以获得两个x和y坐标并在Point.cpp中得到它们的长度以及它们在LineSegment.cpp中的斜率我遇到了这些错误。
LineSegment.cpp:在成员函数'void LineSegment :: setEnd1(Point)'中: LineSegment.cpp:23:错误:在'double'之前预期的primary-expression
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设置为double。
Point(double x = 0.0, double y = 0.0)
{
XCoord = x;
YCoord = y;
}
答案 0 :(得分:0)
主要问题(显然,正如编译器已经说过的那样)只在这里:
void LineSegment::setEnd1(Point p1)
{
p1.setXCoord(double); // set first xcoordinate to p1
p1.setYCoord(double); // set first ycoordinate to p1
}
在哪里发生什么?您声明类型为LineSegment::setEnd1
的成员函数void(Point)
。现在,Point
类有一个名为setYCoord
的成员函数,其类型不是由您提供的。
现在,double
是表示双精度浮点基本类型的关键字。 C ++语义规则禁止将关键字用作标识符,但有一些例外,即final
和override
。因此,调用Point::setXCoord()
的两行都无效。如果您尝试传递"类型参数",请查看templates。
否则,你应该向函数传递一个合适的值(在标准中也称为expression
,编译理论说)。
你没有提供所述功能的来源,所以我不能再为你做这件事了。
现在,第二个错误意味着编译器无法翻译任何类型的p1
- 这里(它是Point
,不是吗?)成双。首先,这没有逻辑。 Point
包含两个 double
,那么如何将其神奇地转换为单 double
?您可以对其进行一些操作,并返回该操作的结果。无论如何,如果你坚持这会产生任何逻辑,你可以声明一个隐式的类型转换成员函数:
class Point {
// ...
public:
// ...
operator double() {
// Somehow transform a Point into a double and return that
}
};
我希望这能为你带来一些启示!
答案 1 :(得分:0)
问题是,您的setXCord()
和setYCord(
)函数将double
类型值作为参数,因此您需要将double
类型值传递给它们。你所做的只是放置你应该传入的值的变量类型。换句话说,你需要传递一个实际值而不是double。