Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • 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
Joined
Nov 1, 2003
Messages
2
Location
AU
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!
 
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

Back
Top