错误:在'double'修复之前预期的primary-expression?

时间:2015-11-04 05:22:08

标签: c++ class

当我尝试在我的点类中调用我的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;
}

2 个答案:

答案 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 ++语义规则禁止将关键字用作标识符,但有一些例外,即finaloverride。因此,调用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。