C++ “生成错误的来源”;在'之前应为主表达式;浮动'&引用;在继承的简单实现中

C++ “生成错误的来源”;在'之前应为主表达式;浮动'&引用;在继承的简单实现中,c++,inheritance,syntax,C++,Inheritance,Syntax,我似乎无法找到为什么会出现构建错误 “float”之前应为主表达式 在这个实现中 using namespace std; class Point{ public: Point(float X = 0.0, float Y = 0.0); void set(float X, float Y); void setX(float X); void setY(float Y); void get(float * P_x, float * P_y); float getX(); float ge

我似乎无法找到为什么会出现构建错误

“float”之前应为主表达式

在这个实现中

using namespace std;

class Point{
public:

Point(float X = 0.0, float Y = 0.0);

void set(float X, float Y);
void setX(float X);
void setY(float Y);

void get(float * P_x, float * P_y);
float getX();
float getY();

float * pX();
float * pY();

SDL_Point returnSDL();

private:
float x;
float y;
};


class Vector : public Point{
public:
    Vector(float X = 0.0, float Y = 0.0);
};

 ///The errors occur in this constructor...
Vector::Vector(float X, float Y) : Point(float X, float Y){

}

我仍在学习课程的细节,如果有任何帮助,我将不胜感激。我知道这与继承有关,因为当
Vector
不继承
Point
时,程序会正常构建。据我所知,这是继承的正确语法和实现。到目前为止,我找到的Web帮助无法回答。

您将声明函数和使用函数混淆了。声明函数时,需要告诉编译器参数的类型

Vector::Vector(float X, float Y)
现在在成员初始化部分中

: Point(float X, float Y)
在这里,您将向函数调用添加类型,这不是您想要做的。调用函数时,只需将值/变量传递给它

: Point( X, Y)
        ^  ^ no type here as we just pass X and Y to the Point constructor.
这段代码中有两种类似的结构:
向量::向量(浮点X,浮点Y)
:点(浮点X,浮点Y)

  • 第一个(
    Vector::Vector(float X,float Y)
    )是类
    Vector
    的构造函数的声明
  • 另一个(
    :点(浮点X,浮点Y)
    )是一个函数调用;类
    点的构造函数的调用;注意冒号(
    )引入了成员初始值设定项列表
现在,如果您看到两者之间的差异(函数/方法声明或定义与函数/方法调用),您可以自己找到错误:编译器在调用
Point::Point()
构造函数的参数列表中需要表达式,而不是类型

// Look, ma! No errors!
Vector::Vector(float X, float Y) : Point(X, Y) {

}
有关更多信息,请查看有关的文档页面。

:Point(float X,float Y)
->
:Point(X,Y)
// Look, ma! No errors!
Vector::Vector(float X, float Y) : Point(X, Y) {

}