Solved

Delphi to C++

Posted on 2000-03-26
5
328 Views
Last Modified: 2010-04-04
I know this is a Delphi area, but I think only Delphi-people will be able to give me an explanation I can understand.
In my job someone had the bright idea to start using Visual C++ in stead of Delphi. I don't want to start a discussion on who is beter but since I started working in visual C++ I'm running in one stupid problem after the other. The most silly is this. How the hell do you declare a global variable. If I declare one, I get the compiler complaining the symbol is declared more than once. If I declare the global variable static it compiles, but creates a copy of the variable in the two classes I need the variable in. If I make it a member of a class, it complains about not being able to access a static member from a non-static function etc etc.
Whatever happened to putting
myGlobal: integer; in your main unit and being able to access it anywhere you want????
Do I really have to go follow courses to be able to learn visual C++.
Anyway, this should be an ease 200 points for anyone who know visual C++ too.
tnx
Patrick
0
Comment
Question by:PLC
5 Comments
 
LVL 13

Expert Comment

by:Epsylon
ID: 2659963
If you declare a variable in the main unit, you can't access it in any other unit unless you #include the main unit. When there is a circular #include reference you can get that 'symbol is declared more than once' message.

I suggest you drop that global variable in a file that's included in all units.
0
 
LVL 2

Expert Comment

by:Serega
ID: 2660073
I suppose you need to declare variable in some unit, then set it in corresponding .h file as external and include that .h in any unit where you need.
Also I propose you to make a special unit for global variables.
0
 

Author Comment

by:PLC
ID: 2660140
Yep, that's what I tried to do finally. Sounded silly at the time, but I made a file called myGlobals.h with exactly 1 line in it:
UINT myCounter;
and included it in both the other units which let to these problems:

error LNK2005: "unsigned int  myCounter" (?myCounter@@3IA) already defined in ComputeIt.obj

or declared external
error LNK2001: unresolved external symbol "unsigned int  myCounter" (?myCounter@@3IA)




0
 
LVL 3

Accepted Solution

by:
karouri earned 200 total points
ID: 2660664
The problem of global variables is that you want to declare it once aned include it many times.
The solution is to declare the variable as external in some header file, then declare it in a cpp file like this:

//globals.h
extern UINT myCounter;

//end of globals.h

//in globals.cpp
UINT myCounter;
//end of globals.cpp

These two files do the job,now you add globals.cpp to your project and include globals.h in any c file in your project.
Notes:
*C++ Builder uses this technique extensively,it treats a .h and .cpp file as one (Delphi-like unit)
*If I'm not wrong, this is what Serega actually meant, it is only a little more wordy here
*Why you use VC++ when every Delphiander that goes C uses C++ Builder?
0
 

Author Comment

by:PLC
ID: 2661003
Tnx karouri, It's working. Amazing. After your answer, I do agree it was what Serega said but wordier, so also tnx to you Serega.
As for your question about C++builder. First of all, I see no reason not to stay with Delphi as I can do anything with that language. If we have to go to c++, my obvious choice would be C++ builder, but in a large corporation you get told VC++ and that's what it's going to be. So I'm trying to get grips with this awfull way of doing stuff.
You wouldn't happen to know a platform where I could ask these really stupid questions without bothering Delphi users here or VC++ experienced users elsewhere.
tnx again
Patrick
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
This video explains how to create simple products associated to Magento configurable product and offers fast way of their generation with Store Manager for Magento tool.

929 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now