4

我有一个名为 GLObject 的基类,具有以下标头:

class GLObject{
    public:
        GLObject(float width = 0.0, float height = 0.0, float depth = 0.0, 
                 float xPos= 0.0, float yPos = 0.0, float zPos =0.0, 
                 float xRot =0.0, float yRot = 0.0, float zRot = 0.0);
    ... //Other methods etc
};

还有一个 CPP:

GLObject::GLObject(float width, float height, float depth, 
                    float xPos, float yPos, float zPos, 
                    float xRot, float yRot, float zRot){
    this->xPos = xPos;
    this->yPos = yPos;
    this->zPos = zPos;
    this->xRot = xRot;
    this->yRot = yRot;
    this->zRot = zRot;
    this->width = width;
    this->height = height;
    this->depth = depth;
}

接下来我有一个派生类:标题:

class GLOColPiramid : public GLObject
{
public:
    GLOColPiramid(float width, float height, float depth, float xPos = 0.0, float yPos = 0.0, float zPos = 0.0, float xRot = 0.0, float yRot = 0.0, float zRot = 0.0);
    ...
};

.cpp 文件

GLOColPiramid::GLOColPiramid(float width, float height, float depth, float xPos, float yPos, float zPos, float xRot, float yRot, float zRot) : GLObject::GLObject(width, height, depth, xPos,yPos,zPos,xRot,yRot,zRot)
{

}

这给了我一个错误:

glocolpiramid.cpp:4:错误:C2039:“{ctor}”:不是“GLObject”的成员

为什么?

我正在使用带有 MSVC2010 32 位编译器的 Qt 4.8.4

4

2 回答 2

5

尝试GLObject::GLObject::GLObject声明中删除。

.cpp包含以下实现的文件中GLOColPiramid

GLOColPiramid::GLOColPiramid( .... ) : GLObject::GLObject( .... )
                                       ^^^^^^^^^^

它在 C++ 中是合法的,但测试一下,也许 MSVC2010 有问题。

于 2013-05-09T12:07:04.487 回答
1

从派生类构造函数调用基类构造函数时,不应使用BaseClassName::BaseClassName(...)语法显式引用基类构造函数——这就是编译器所抱怨的。

相反,只需使用基类名称并传递参数:

GLOColPiramid::GLOColPiramid(float width, float height, float depth, float xPos, float yPos, float zPos, float xRot, float yRot, float zRot) : GLObject(width, height, depth, xPos,yPos,zPos,xRot,yRot,zRot)
{

}
于 2013-05-09T12:07:24.413 回答