|
massad wrote:
shouldnt the compiler be able to know what all the classes area?
No. The order of the header files can be important. If a prototype in class1.h needs to know about a type defined in class2.h then class2.h normaly needs to be included before class1.h.
Most developers, now days, put a guard define# in there headers so that they will not be included twice (prevents include recursion). This also give you the advantage of allowing you to include any header files (w/guards) in any header file that needs the types defined in that header. It is also why C++ allows you to declare a class type, before it is define.
#ifndef _CLASS1_H_ // guard
#define _CLASS1_H_
#include "class2.h"
class class1 {...}
#endif // _CLASS1_H_
OR
#ifndef _CLASS1_H_ // guard
#define _CLASS1_H_
class class2;
class class1 {...}
#endif // _CLASS1_H_
INTP
"The more help VB provides VB programmers, the more miserable your life as a C++ programmer becomes."
Andrew W. Troelsen
|
|
|
|
|
Thank you John,
I have fixed the problem. Before I posted here, I tried to use forward declaration and the guards but I still seemed to have the errors appear.
The problem seems to have stemmed from the fact that the code was all inline in the header file (this is the way it was given to me, I didnt write it) and no code was put into the .cpp file.
While trying to figure out what the problem was, I had become fed up with all the code being inline and split it up between a header and the source and the problems disappeared.
Out of curiousity, so that I know for future reference, is there a problem with forward declarations if all the code is inside a header file?
|
|
|
|
|
massad wrote:
is there a problem with forward declarations if all the code is inside a header file?
I would not think so. At least I have had no problems, resonantly.
INTP
"The more help VB provides VB programmers, the more miserable your life as a C++ programmer becomes."
Andrew W. Troelsen
|
|
|
|
|
Hello,
It seams that a problem with including to many headers. You should not include stdafx.h in your header.
The problem that you face is that you include stdafx.h in class1.h. In stdafx.h, you include class1.h, which in turn includes stdafx.h again. This is an infinite cycle and the compiler knows this. It just stops including and you get some errors.
If you don't use class1 in class2, you can include class2.h instead of stdafx.h in class1.h and you problem should be gone!
Behind every great black man...
... is the police. - Conspiracy brother
Blog[^]
|
|
|
|
|
#include "stdafx.h" is a signal to the compiler to use the precompiled header -- your compiler will perform better if you don't include stdafx.h in header files, instead include it as the first include file in your source files.
|
|
|
|
|
massad wrote:
[stdafx.h]
#include "class1.h" //the order of files here seems to cause problems.
#include "class2.h"
Why are you including class1.h and class2.h in stdafx.h ? In 12 years of using MFC, I've never had the need to include anything in that file except for system (e.g., Win32, MFC, STL) header files.
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
in stdafx.h keep only those header files which are required by every .cpp which will save your compilation time.in your case if u put the header file in stadfx.h the order of these included file is imp as u r using an instance of a class into the other.in ur case its better u dont put up any include file in stadfx.h .rather than u put those header file in the .h file of a .cpp file which u require in that .cpp file
|
|
|
|
|
Is there any way to compile a simple console application with Visual Studio NET 2003 to run on a machine without NET Framework installed? I'd like the target application to run on any machine, not just those with NET installed.
I'm sure this is a simple thing, but I sure can't find it!
|
|
|
|
|
If you used Managed C++, then no, there is no way you can run those applications without the .NET framework.
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
All I want to do is to create a simple console application, I can't believe it's impossible with VC++ NET.
|
|
|
|
|
|
All I want to do is to create a simple console application, I can't believe it's impossible with VC++ NET.
If a "win32" console application,you can do it.
If a ".NET" console application, you can't do it
Tiny dog is me.
|
|
|
|
|
Problem solved, I don't know how the /clr switch got set in the project, but there it is!
|
|
|
|
|
I have an option to make a Win32 Console Application in the New Project Wizard, that's close to what you're looking for. You could try making an empty project, too! Just include the basic dependencies you need.
|
|
|
|
|
Thanks, I figured it out. I started over with a basic W32 console application. I have no idea why my original attempt refused to function without NET installed, I started it the same way.
|
|
|
|
|
You must've either specified a .NET console project, or turned on managed extensions (/clr switch) in your project settings.
Tech, life, family, faith: Give me a visit.
I'm currently blogging about: Homosexuality in Christianity
Judah Himango
|
|
|
|
|
As it turns out, the /clr switch was on. I'm not sure how it hapened, since I've been using VC++ 6.0 for a long time, just got started with this version.
|
|
|
|
|
I'm trying to print on a dot-matrix printer.
I want to send "raw" ascii characters to the printer (not graphics), in order to avoid the "NLQ" mode (sending raw text is the only way to print without the "NLQ").
I use OpenPrinter, StartDocPrinter, StartPagePrinter, WritePrinter, EndPagePrinter, EndDocPrinter and ClosePrinter.
But spanish characters like "eñe" (ñ Ñ), "cedilla" (ç Ç), spanish accents (á é í ó ú) and the "dieresis u" (ü) are not printed well.
I need to set the spanish charset.
I've also tried the GDI functions (creating a DC with CreateDC("WINSPOOL", printerName, NULL, NULL)), and using the stock font DEVICE_DEFAULT_FONT, but NLQ gets activated.
What else can I do?
|
|
|
|
|
You can send raw bytes of th eproper escape sequence to the printer to set it into the Spanish character set and then send those 'character' bytes out to the printer. Should print out fine then.
|
|
|
|
|
I have an SDI application with a FormView. The FormView has two buttons. One opens a CDialog derived class that is Modal and a Child.
The other opens a CDialog derived class that is Modeless and a Child.
Everything works fine when the Child style is removed and WS_POPUP is applied.
When it is applied the dialogs open up but are
(Modal and Child)
behind Mainframe with no way to get at it except minimize Mainframe. After the minimization of Mainframe the dialog does not allow one to click on it (Frame titlebar is grayed. I believe the whole dialog box is disabled.
(Modeless and Child
appears but does not allow one to click on it as the Frame titlebar is grayed. I believe the whole dialog box is disabled.
Now understand everything works as it should with the WS_POPUP style. Switch that and I get problems. The ONLY difference is the style. What is wrong?
Thanks.
//Modal Child
void CParentExamplesView::OnButton3()
{
CModalChild cmd;
cmd.DoModal();
}
//Modeless Child
void CParentExamplesView::OnButton4()
{
if (!m_pModelessChildDialog)
m_pModelessChildDialog= new CModelessChild;
if (!::IsWindow(m_pModelessChildDialog->GetSafeHwnd()))
m_pModelessChildDialog->Create(IDD_DIALOG6, this);
m_pModelessChildDialog->ShowWindow(SW_SHOW);
}
|
|
|
|
|
Dialogs SHOULD have parents!
CModalChild cmd;
cmd.DoModal(this);
m_pModelessChildDialog= new CModelessChild(this);
So give THAT a try.
|
|
|
|
|
Thanks,
DoModal() doesn't take any parameters
The modeless example IS passing in the parent.
Regardless if you don't pass in any parents the mainframe is the owner.
Still no answers.
|
|
|
|
|
mx483 wrote:
Now understand everything works as it should with the WS_POPUP style. Switch that and I get problems.
So why are you not wanting to use WS_POPUP ? You've not indicated that you would rather use WS_CHILD . All I can gather is that you've found something that works and want to know why.
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
Actually..
I found something that didn't work and wanted to know why. This is how I learn. I have no need to use the dialog as a child in modal or modeless...yet, but knowing why something does and doesn't work is paramount in continuing my growth as a programmer. I realize most people just solve a problem and blindly move on never really gaining from the experience. Solidifying concepts is what I'm trying to do. I really hoped people wouldn't constantly ask why I want to do this or that. My question was not a should or shouldn't but rather a why. I appreciate your taking the time to answer though.
|
|
|
|
|
Anonymous wrote:
I found something that didn't work and wanted to know why.
Really? When I read your post, it's easy to come away with a different impression. Consider, "I'm trying to drive a nail into a board with a hammer. Now understand everything works as it should with the nail. Switch that to a screw instead and I get problems. What is wrong?" Or, "I'm trying to drive my car with round tires. Now understand everything works as it should with the round tires. Switch that to out-of-round tires instead and I get problems. What is wrong?" See the confusion?
Anonymous wrote:
I really hoped people wouldn't constantly ask why I want to do this or that. My question was not a should or shouldn't but rather a why.
While I certainly understand and applaud your situation, what I have found over the years is that when folks get stuck and ask for help, it is usually because they are doing something wrong (at the design level) that should never have been done to begin with. This is especially true with MFC. Most folks, especially new ones, have no idea what MFC is doing behind the scenes. They've learned it from the outside-in rather than from the inside-out. Knowing what the underlying Win32 SDK is actually doing is very important in making a successful application. Consequently they make erroneous assumptions (e.g., "But I thought message maps worked this way."), thus leading to a situation where they are trying to solve a problem that was doomed from the start.
That said, MSDN clearly states:
Do not use the WS_CHILD style with a modal dialog box. The DialogBox function always disables the parent/owner of the newly created dialog box. When a parent window is disabled, its child windows are implicitly disabled. Since the parent window of the child-style dialog box is disabled, the child-style dialog box is too.
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|