|
Hi all ,
Please help me out with this one.
I have made a Dialog-based app (MyDialog). I added a class of my own(MyClass) to this application.
MyDialog uses MyClass. So i did a #include "MyClass.h" in MyDialog.cpp
Later on i realised that MyClass requires MyDialog class. So i did a #include "MyDialog.h" in MyClass.cpp.
Now when i compile, i get an "Undelcared Identifier" error at:
enum {IDD = IDC_MY_DIALOG};
I tried changing the locations of the #include to all possible places (including StdAfx.h).
Please help me out everyone. Am i missing anything???? How should i include the headers when two files are interdependent.
Thanks in advance!
*** Who said nothing is impossible? I have been doing it since a long time ***
|
|
|
|
|
Hello.
You can use the concept of "forward declaration". That is: You just declare the class in one of the header files, for instance, in MyDialog.h:
class MyClass;
class MyDialog ... {
....
};
Kakan
|
|
|
|
|
Hi Kakan,
Thanks for the quick reply.
I think i have tried a forward declaration earlier.
But let me double check if i had done it correctly.
So, should i make forward declaration in both the files for the other class.
Like:
MyDialog.h
class MyClass<br />
class MyDialog<br />
{<br />
....<br />
};
and then
MyClass.h
class MyDialog;<br />
class MyClass<br />
{<br />
....<br />
};
Should i continue to include the header files in each of the file as i have been doing?
In MyClass, i dont require to make MyDialog object a member. i am just using it in one of the functions of MyClass.
Please reply.
*** Who said nothing is impossible? I have been doing it for a long time ***
|
|
|
|
|
Hello, and I'm sorry for the delay. I'm at work, you know and I have to make a living too...
This situation really isn't very easy to get going, but it is possible.
Try this:
In MyDialog.h:
class MyClass;
class MyDialog
{
....
};
In MyDialog.cpp:
#include "MyDialog.h"
#include "MyClass.h"
And make sure that each of the h-files can be included just once.
I.e:
#ifndef MY_DIALOG_H
#define MY_DIALOG_H
... definition of MyDialog
#endif
|
|
|
|
|
Well Kakan,
i dont have the code with me right now.
I'll try it out and tell you tomorrow.
Thanks a lot for the help.
I'll contact you tomorrow.
Thanks a lot.
*** Who said nothing is impossible? I have been doing it for a long time ***
|
|
|
|
|
OK. I'm using the trial and error-method when I have to get a construct like this to compile.
It gets a lot of errors...
Good luck.
Kakan
|
|
|
|
|
Hi Kakan,
It was just a silly fault on my part.
i am extremely sorry about the whole matter.
During the initial phase, i had commented out the resource.h file.
Moreover, i had declared one function in MyClass.h but forgot to define it in MyClass.cpp. That gave a linker error and showed the mangled names of the function. Since the names were not so clear, i skipped reading it everytime.
Yesternight, i looked more closely to the error and read each line of it then realised my mistake.
No forward declaration was required. I created another simple C++ project and simulated the same situation, but it worked out.
Thanks for all the help.
And, sorry that i bothered you.
Thanks a lot!
*** Who said nothing is impossible? I have been doing it for a long time ***
|
|
|
|
|
;);)
As the Aussies would put it: No worries mate!
Problem solved, that's the main thing.
And you've learnt your lesson. IMO, it's the knowledge that comes the hard way, that's stick to ones mind.
Keep on going!
|
|
|
|
|
Hi,
try including resource.h in myclass.cpp. Hope it works.
Bye
Cool Ju
Dream Ur Destiny
|
|
|
|
|
Hi Cool Ju,
thanks for your help.
I tried that too. But the problem is not solved by that.
I think Kakan is right. It must be something related to forward declaration.
Please tell me if you have any idea regarding that.
Thanks a lot.
*** Who said nothing is impossible? I have been doing it for a long time ***
|
|
|
|
|
Hi,
Where did u added. Add in CMyclass.cpp ie where u added the CMyDialog.h
Its working for me.
Bye,
Cool Ju
Dream Ur Destiny
|
|
|
|
|
Well, i dont have the code with me right now...
I'll try it and tell you tomorrow.
Thanks a lot, man. Thanks for the help.
*** Who said nothing is impossible? I have been doing it for a long time ***
|
|
|
|
|
Hi Cool Ju,
It was just a silly fault on my part.
i am extremely sorry about the whole matter.
During the initial phase, i had commented out the resource.h file.
Moreover, i had declared one function in MyClass.h but forgot to define it in MyClass.cpp. That gave a linker error and showed the mangled names of the function. Since the names were not so clear, i skipped reading it everytime.
Yesternight, i looked more closely to the error and read each line of it then realised my mistake.
Thanks for all the help.
And, sorry that i bothered you.
Thanks a lot!
*** Who said nothing is impossible? I have been doing it for a long time ***
|
|
|
|
|
I think IDC_MY_DIALOG ist not defined.
Did you include resource.h in your Source ?
Is there a Dialog with this ID in your resource ?
|
|
|
|
|
HI Karle,
Thanks for the help.
I had commented out "resource.h" in "stdafx.h"
Moreover, i forgot to define a function which i had declared in the header file. The linker error was so confusing that i wasn't able to understand the actual problem.
Now its working...
Thanks for the help.
*** Who said nothing is impossible? I have been doing it for a long time ***
|
|
|
|
|
Hi guys,
When I try to link a DLL I get this error message.
Cannot Find TestDLL even with argument lookup.
TestDLL is a function defined in the dll.
I am a newbie to DLL. I have done it in other languages but not in VC. Can somebody tell me how to go about this.
Also kindly tell me the basic steps for working with a DLL.
<marquee direction="up" height="30" scrolldelay="1" step="1" scrollamount="1" hspace="0" vspace="0">
--Owner Drawn
--Nothing special
--Defeat is temporary but surrender is permanent
--Never say quits
--Jesus is Lord
|
|
|
|
|
Hi,
How r u linking the dll (explicitly - lib or implicitly - run time loading)
Check this[^] for tutorials
Bye
Cool Ju
Dream Ur Destiny
|
|
|
|
|
Runtime linking
<marquee direction="up" height="30" scrolldelay="1" step="1" scrollamount="1" hspace="0" vspace="0">
--Owner Drawn
--Nothing special
--Defeat is temporary but surrender is permanent
--Never say quits
--Jesus is Lord
|
|
|
|
|
For Runtime Linking are you calling LoadLibrary(..) and GetProcAddress api?
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
Could you tell me your Flow... are you using LoadLibrary and GetProcAddress Api to dynamically load dll?
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
I am using neither of them.
I just included the necessary files and then the library path in project settings.
I don't if I am right.
Will need help.
<marquee direction="up" height="30" scrolldelay="1" step="1" scrollamount="1" hspace="0" vspace="0">
--Owner Drawn
--Nothing special
--Defeat is temporary but surrender is permanent
--Never say quits
--Jesus is Lord
|
|
|
|
|
Here A Small code that will demonstrate dynamically loading of function from DLL.here, I will load mciSendString defined in WINMM.DLL .
// first make Function pointer
typedef MCIERROR (WINAPI * MCISENDSTRING)(
LPCTSTR lpszCommand,
LPTSTR lpszReturnString,
UINT cchReturn,
HANDLE hwndCallback
);
/// In function where you want to use about api
MCISENDSTRING fnmciSendString=NULL;
HMODULE hLibrary;
// load the library
hLibrary=LoadLibrary(_T("winmm.dll"));
// check is library loaded
if(hLibrary)
{
// if yes try to get Function addressfnmciSendString=(MCISENDSTRING)::GetProcAddress(_T("mciSendString"));
}
// check is we got Function Pointer
if(fnmciSendString)
{
// if yes call function
(fnmciSendString)(......);
}
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
Thanks
<marquee direction="up" height="30" scrolldelay="1" step="1" scrollamount="1" hspace="0" vspace="0">
--Owner Drawn
--Nothing special
--Defeat is temporary but surrender is permanent
--Never say quits
--Jesus is Lord
|
|
|
|
|
Help me. I write a UDP/IP transfer file programe,but don't transfer,Who can help ? Please leave Email , i'll talk about with UDP/IP transfer file.
i use MFC c++
........
-- modified at 3:12 Monday 21st November, 2005
|
|
|
|
|
::SetCursor(::LoadCursor(NULL,IDC_WAIT));
m_pMenu->TrackPopupMenu(TPM_CENTERALIGN,p.x,p.y,pParent,NULL);
::SetCursor(::LoadCursor(NULL,IDC_ARROW));
I wrote this code, it doesn't work correctly.
|
|
|
|