Destructor mismatch

Started by
4 comments, last by kiome 16 years, 2 months ago
everytime i try ti make a class with constructors and Destructors, it messed up. it tells me that the distructor is a mismatch ort what ever. here is my code.


class Cor_CDirect3D9Renderer
{
public:
	int		Cor_Direct3D9Renderer();
	virtual ~Cor_Direct3D9Renderer();
	int		Cor_CDirect3DRenderer9(HWND hwnd, int width, int height, bool fullscreen);
	void	Cor_Sync();
	LPDIRECT3D9* Cor_ReturnDirect3D9();
	LPDIRECT3DDEVICE9* Cor_ReturnDirect3DDevice9();
	LPDIRECT3DSURFACE9* Cor_ReturnBackBuffer();
	D3DPRESENT_PARAMETERS* Cor_ReturnPresentParams();
private:
	LPDIRECT3D9 Cor_Direct3D9;
	LPDIRECT3DDEVICE9 Cor_Direct3DDevice9;
	D3DPRESENT_PARAMETERS Cor_PresentParams;
	LPDIRECT3DSURFACE9 Cor_BackBuffer;
};




1>c:\documents and settings\directx\my documents\visual studio 2008\projects\cor_direct3d9\cor_direct3d9\Cor_CDirect3D9.h(15) : error C2523: 'Cor_CDirect3D9Renderer::~Cor_Direct3D9Renderer' : destructor tag mismatch
1>.\Cor.cpp(4) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int


I think i figured out how to get rid of Access violations. just initialize every variable in the class in the constructor to be NULL, that'll get rid of the access violations, maybe. Anyways, can you guys help me with this annoying error concerning the destructor?
Advertisement
Quote:Original post by Enerjak
I think i figured out how to get rid of Access violations. just initialize every variable in the class in the constructor to be NULL, that'll get rid of the access violations, maybe.

If your variables are pointers, then yes you should initialize them to NULL so that you can tell whether it actually points to something or not.

If try to use a pointer when it's not actually pointer to something, you will get an access violation error. People usually use NULL (A.K.A. 0) as an 'invalid pointer value' so that before they use the pointer, they can check if it's valid.
e.g.
//Good practice:MyClass* pointer = 0;...if( randomThing == true )  pointer = new MyClass;...if( pointer != 0 )//it's not NULL, so I assume it's pointing to a new MyClass  pointer->doStuff();//This should never cause an error, because we know the pointer is valid//Bad Practice:MyClass* pointer;//not initialized, so it could be anything, such as 0xBAADF00D...if( randomThing == true )  pointer = new MyClass;...//There's no way for me to know if it's actually pointing to a new MyClass, or if it's just uninitialized!if( pointer != 0 )//it wasn't initialized to 0, so this will almost always return true, even if the pointer isn't valid  pointer->doStuff();//I hope this doesn't cause an access violation!!!


[Edited by - Hodgman on January 31, 2008 6:16:14 PM]
The answer is in the error message:
"Cor_CDirect3D9Renderer::~Cor_Direct3D9Renderer" should be
"Cor_CDirect3D9Renderer::~Cor_CDirect3D9Renderer"

thanks, worked fine. I really need to pay more attention to what the hell i'm doing....
Lo and behold, the class-and-method-name clutter has disappeared!

namespace Core{  class Direct3D9Renderer  {  public:    int Direct3D9Renderer();    virtual ~Direct3D9Renderer();    int Direct3DRenderer9(HWND hwnd, int width, int height, bool fullscreen);    void Sync();    LPDIRECT3D9* ReturnDirect3D9();    LPDIRECT3DDEVICE9* ReturnDirect3DDevice9();    LPDIRECT3DSURFACE9* ReturnBackBuffer();    D3DPRESENT_PARAMETERS* ReturnPresentParams();  private:    LPDIRECT3D9 Direct3D9;    LPDIRECT3DDEVICE9 Direct3DDevice9;    D3DPRESENT_PARAMETERS PresentParams;    LPDIRECT3DSURFACE9 BackBuffer;  };}
I'm not sure how you've managed to compile that, but a constructor has no return type:
It's Direct3D9Renderer(); not int Direct3D9Renderer();.
My Blog

This topic is closed to new replies.

Advertisement