|
|
kdar wrote: The functions are mangled so that they can be uniquely identified and called upon invocation
no you are wrong. mangling is nothing to do with it. mangaling is more relevant for compilers and linkers.
The hidden param is the this param passed to the member functions.
-Prakash
|
|
|
|
|
|
Owner drawn wrote: Edit:Where did he go
he left coz he could not support his theory.
-Prakash
|
|
|
|
|
|
|
Owner drawn wrote: ForumVisual C++
Subject:Re: Zzzz
Sender:Owner drawn
Date:6:56 12 Jan '06
don't sleep
"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
|
|
|
|
|
A function member of a class doesn't have the same prototype as a global function: there is the 'this' paramter that is passed as an implicit argument of the function (but it is transparent to the user). To avoid that, you can declare your member function as static. A static function is shared aming all instances of your class and thus doesn't require the implicit 'this' parameter. But of course, within a static function, you can only access static member of your class (because the function does not belong to a specific instance of the class).
|
|
|
|
|
|
within a static function, you can only access static member of your class (because the function does not belong to a specific instance of the class).
Unless you also pass a pointer to the object into the functiona as an additional argument, then you can access public members and functions of the class using the pointer to the class.
Marriage slows down your coding, a baby slows it down even more!
|
|
|
|
|
Hi,
You can alsoo change AFunction to
void AFunction(void(CAClass::*pFunction)())
{
} this way you can pass a pointer to a member function.
This said you will need to have an object of the type CAClass available to execute the function.
codito ergo sum
|
|
|
|
|
|
i use this macro:
#define CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember)(int))
typedef void (CObjType::*fnType)(int);
...
fnType m_fnPtr;
...
CALL_MEMBER_FN(*this, fnPtr)(5);
Cleek | Image Toolkits | Thumbnail maker
-- modified at 11:44 Thursday 12th January, 2006
|
|
|
|
|
1. I tried to use a global variable in every c++ file with the same name that is szRegPath (a CString). But I got some error and I had to use either different variable names in all the files (if global) or i had to put those inside functions. How can I resolve this?
2. I want to have one int variable which is global to all the c++ files and that should maintain its value state. If one file modifies the value to 7, then when it is called by another file, it should have its value as 7.
Please help me
Aljechin Alexander
|
|
|
|
|
Aljechin wrote: I want to have one int variable which is global to all the c++ files
You would therefore need to declare your variable in a file that is visible to all your cpp files. I would suggest declaring it in your stdafx.h file, if using a standard mfc built application.
I Dream of Absolute Zero
|
|
|
|
|
Not just declaring. I need the variable to maintain its state throught the c++ files. How do i achieve this?
Thanks
|
|
|
|
|
If you want those variables in different *.cpp files to be actually different variables and still compile, declare them as static (local to a particular *.cpp).
If, on the other hand, you need one variable to be global and available in several (or all) *.cpp files, do the following:
1) in some header: extern int myvar;
2) in any *.cpp: int myvar;
3) in every *.cpp where you need to use myvar: #include "that_header's_name.h"
|
|
|
|
|
HAND wrote: 1) in some header: extern int myvar;
2) in any *.cpp: int myvar;
3) in every *.cpp where you need to use myvar: #include "that_header's_name.h"
But this will become a local variable for every c++ file. I dont want that. I want a global variable with its state maintained throught all c++ files. How can I achieve this?
|
|
|
|
|
Aljechin wrote: But this will become a local variable for every c++ file.
No, it won't.
Regards,
Nish
|
|
|
|
|
|
its a bit off topic, but consider this :
global variables are quite a bad habit to take, and should be used only when other cases can't work.
could you please explain a bit why you need so ?
about your variables naming, it is quite incorrect.
sz is used for the C-Style strings, which are char arrays with a trailing null character.
if you are using CString, preceed the variable name with str instead :
char* pszFoo = "C-Style Hello";
CString strFoo = "CString Hello";
TOXCCT >>> GEII power [toxcct][VisualCalc 2.20][VisualCalc 3.0]
-- modified at 6:08 Thursday 12th January, 2006
|
|
|
|
|
My application stores its installation path and various information in registry key. But it will be enough for me to find it once, that is at the application startup, in InitInstance() Later I will put this value in one variable and want to call it from various places depending on user's action, and certain events. Now what I do is I am reading that registry path every where throught the program (whenever the value is required)
I thought it would be a nice idea to have stored it in a global variable which would be accessible by all the c++ files.
Thanks for your explanation about naming conventions. I will certainly follow those.
Thanks and Regards,
Aljechin Alexander
|
|
|
|
|
when creating your application object, you could pass those datas as parameters to the constructor, couldn't you ?
TOXCCT >>> GEII power [toxcct][VisualCalc 2.20][VisualCalc 3.0]
|
|
|
|
|
Can you please tell how to do that? I do not know this. Can you show a small code snippet example? The information will be trivially helpful for me.
Thanks and Regards,
Aljechin Alexander
|
|
|
|
|
well, i think you application is a class, so it might have a constructor, and as a constructor is a function, you can pass parameters to it.
something like this:
InitInstance() {
MyApplication app(params);
}
TOXCCT >>> GEII power [toxcct][VisualCalc 2.20][VisualCalc 3.0]
|
|
|
|