Continue to Site

Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations cowski on being selected by the Eng-Tips community for having the most helpful posts in the forums last week. Way to Go!

Inheritance Constructor Problem

Status
Not open for further replies.

Meindert

Computer
Nov 1, 2003
2
Here is my super class:
#ifndef OPENGLSCENE_H
#define OPENGLSCENE_H

#include <windows.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>

#include &quot;Globals.h&quot;
#include &quot;Triangle.h&quot;

#define TRUE 1
#define FALSE 0

class OpenGLScene {
HGLRC hRC;
HWND hWnd;
HINSTANCE hInstance;
HDC hDC;
BOOL done;
bool fullscreen;
MSG msg;
GLvoid ReSizeGLScene(GLsizei width, GLsizei height);
int InitGL(GLvoid);
BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag);

public:
OpenGLScene (char* title, int width, int height, int bits, bool fullscreenflag);
GLvoid KillGLWindow(GLvoid);
virtual void addTriangle (Triangle *T) = 0;
virtual int DrawGLScene(GLvoid) = 0;
virtual void DrawTriangle (Triangle *T) = 0;
int start ();
};

#endif

And below is my derived class:
#include &quot;OpenGlScene.h&quot;


class MyOpenGLScene : public OpenGLScene
{
Triangle *T;

public:
MyOpenGLScene(char* title, int width, int height, int bits, bool fullscreenflag);
void addTriangle(Triangle *T);
void DrawTriangle(Triangle *T);
int DrawGLScene();
};

MyOpenGLScene::MyOpenGLScene(char* title, int width, int height, int bits, bool fullscreenflag) {
title = &quot;Stage 1&quot;;
width = 800;
height = 600;
bits = 16;
fullscreenflag = 0;
}

void addTriangle(Triangle *T) {

}

void DrawTriangle(Triangle *T) {

}

int DrawGLScene() {

return 0;
}

Now the error : error C2512: 'OpenGLScene' : no appropriate default constructor available
Error executing cl.exe.

I don't know what's wrong...is it my sub class constructor wrong? Please help me!
 
Replies continue below

Recommended for you

Depending on your design, you have to either create a default constructor for your mother class, or to pass parameters to the mother's constructor from the child class.

Since &quot;char* title, int width, int height, int bits, bool fullscreenflag&quot; are parameters that the mother class deals with, I think I would implement it that way :

1) In OpenGLScene, implement the constructor as if you wanted to be able to instanciate an OpenGLScene properly :

OpenGLScene::OpenGLScene(char* title, int width, int height, int bits, bool fullscreenflag) {
title = &quot;Stage 1&quot;;
width = 800;
height = 600;
bits = 16;
fullscreenflag = 0;
}

2) In MyOpenGLScene, deal with the parameters that are specific to the derived class, and simply pass the others to the mother class' constructor :

MyOpenGLScene::MyOpenGLScene(char* title, int width, int height, int bits, bool fullscreenflag, int IAddedThisOne) : OpenGLScene(title, width, height, bits, fullscreenflag)
{
// Deal with IAddedThisOne
}

__________

The colon followed by a constructor name tells the compiler how you want to build the class you are inheriting from. If absent, the default constructor is used.


Hope it helps, and that I haven't done too many mistakes.
 
Err, well, I copy-pasted something too fast :

The implementation of OpenGLScene::OpenGLScene(char* title, int width, int height, int bits, bool fullscreenflag) should do something usefull with the parameters, of course.
 
Status
Not open for further replies.

Similar threads

Part and Inventory Search

Sponsor