错误:“双重”修复之前的预期主表达式?

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++ 语义规则不允许将关键字用作标识符,但有少数例外,即finaloverride。因此,调用Point::setXCoord() 的两行都是无效的。如果您尝试传递“类型参数”,请查看templates。

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

你没有提供上述功能的来源,所以我不能再为你做这件事了。

现在,第二个错误意味着编译器无法将whatever-is-the-type-of-p1-here(它是Point,不是吗?)转换为double。首先,这不符合逻辑。一个Point 包含两个 doubles,那么你如何神奇地将它转换成一个单个 double?您可以对其进行一些操作,并返回该操作的结果。无论如何,如果你坚持这样做有任何逻辑,你可以声明一个隐式类型转换成员函数:

class Point 
    // ...

    public:
        // ...

        operator double() 
            // Somehow transform a Point into a double and return that
        
;

我希望这对你有所启发!

【讨论】:

以上是关于错误:“双重”修复之前的预期主表达式?的主要内容,如果未能解决你的问题,请参考以下文章

矩阵类:错误:“)”标记之前的预期主表达式

如何解决此错误“'int'之前的预期主表达式?”

* C++ 之前的预期主表达式

在struct之前的错误预期表达式

在另一个成员函数中调用成员函数时,在“int”之前的预期主表达式

strcmp - '[' 标记之前的预期主表达式