错误:修复“double”之前应为主表达式

error: expected primary-expression before ‘double’ fix?

本文关键字:表达式 修复 double 错误      更新时间:2023-10-16

我正在处理我的任务,以获得两个xand y坐标,并在Point.cpp中获得它们的长度,在LineSegment.cpp中获取它们的斜率。当我试图在我的点类中调用我的setXCoord时,我遇到了这些错误。

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设置为double。

Point(double x = 0.0, double y = 0.0)
{
    XCoord = x;
    YCoord = y;
}

问题是setXCord()setYCord()函数将double类型的值作为参数,因此需要将double类型的值传递到它们中。你所做的只是放置你应该传递的值的变量类型。换句话说,你需要传递一个实际值,而不是加倍。

主要问题(显然,正如编译器已经说过的)就在这里,而且只在这里:

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++语义规则不允许将关键字用作标识符,只有少数例外,即finaloverride。因此,调用Point::setXCoord()的两条线路都是无效的。如果您试图传递一个"类型参数",请查看模板。

否则,您应该向函数传递一个适当的值(在标准语言和编译器理论中也称为expression)。

你没有提供上述函数的来源,所以我不能再为你做任何事情了。

现在,第二个错误意味着编译器不知道如何将任何类型的-p1-此处(它是Point,否?)转换为双精度。首先,这毫无逻辑可言。一个Point包含两个double,那么如何神奇地将其转换为单个double呢?您可以对它执行一些操作,并返回该操作的结果。无论如何,如果您坚持认为这会产生任何逻辑,那么您可以声明一个隐式类型转换成员函数:

class Point {
    // ...
    public:
        // ...
        operator double() {
            // Somehow transform a Point into a double and return that
        }
};

我希望这能给你带来一些启示!