Solved

Stupid newbie question re: #include

Posted on 2002-04-24
5
152 Views
Last Modified: 2013-11-20
Hi Guys,

Got a real dumb question for you, but it is someting I for the life of me cannot work out...

Where do I put the #include directives for any new classes that I add?  I have been putting them in StdAfx.h as it seems to want me to, but for some reason, the classes I have been creating with the class wizard are not being recognised in other parts of the project. e.g:

// StdAfx.h
#include "firstDlg.h"
#include "secondDlg.h"
#include "NewClass.h"

// Application.h
class CApplicationApp : public CWinApp
{
    // other initialisation...

    CNewClass* m_pNewClass;
    // the above line fails
}

Does anyone have any ideas?
0
Comment
Question by:negative_entropy
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
5 Comments
 

Expert Comment

by:Jedimaster
ID: 6967590
by putting the #include in StdAfx.h you are basically giving all of you classes access to those included classes.  if you look, MFC automatically includes StdAfx.h in every .cpp file you create.  so... if you include the class in StdAfx.h and the class you are working in has StdAfx.h included in it then the class you are working in can see the other class.  Confused yet? ;0)  lets try this...


StdAfx.h file*******************************

#include "class1.h"

********************************************

file1.h*************************************

#include "StdAfx.h"

class1 can be accessed.

*******************************************

file2.h*************************************

(StdAfx.h not included)
(class1.h not included)

cannot access class1.

********************************************

file3.h**************************************

#include "class1.h"

class1 can be accessed.

*********************************************


hope that clears things up...
0
 

Accepted Solution

by:
1cand01t earned 50 total points
ID: 6967744
in Application.h
try one of the following line
either
#include "NewClass.h"

or
class NewClass;
=======================================

// Application.h

//************-either-****************

#include "NewClass.h"

//**************-or-******************

class NewClass;

//************************************

class CApplicationApp : public CWinApp
{
    // other initialisation...

    CNewClass* m_pNewClass;
    // the above line will not fail
}

good luck
0
 

Expert Comment

by:1cand01t
ID: 6967751
make a correction
instead of >> class NewClass;

class CNewClass; // the classname which u want to access
0
 
LVL 31

Expert Comment

by:Zoppo
ID: 6968205
BTW, the second method 1cand01t suggested is called 'forwarding' and may save
a lot of compile time in larger projects because you don't have to include "NewClass.h"
into any other files which don't use CNewClass but need to include "Application.h"
0
 
LVL 16

Expert Comment

by:AlexNek
ID: 6968248
2 negative_entropy
In most cases you must NOT insert your include directive in "StdAfx.h". Try to follow next rules for minimize build time.

1. If you need to use new class in member function(s) insert include directive in *.cpp

2. If you need to use new class in class declaration (*.h) as pointer use forward class declaration in *.h (class CMyClass;) and include directive in *.cpp

3. Otherwise use construction like this:
#ifndef _USEFULL_H_
#define _USEFULL_H_

#include "MyClass.h"
...

#endif //_USEFULL_H_

4. If you use external library or use declaration which not changed oft AND used in the whole project then place include directive in "StdAfx.h".
0

Featured Post

Don't Cry: How Liquid Web is Ensuring Security

WannaCry is just the start. Read how Liquid Web is protecting itself and its customers against new threats.

Question has a verified solution.

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

Preface This article introduces an authentication and authorization system for a website.  It is understood by the author and the project contributors that there is no such thing as a "one size fits all" system.  That being said, there is a certa…
I will show you how to create a ASP.NET Captcha control without using any HTTP HANDELRS or what so ever. you can easily plug it into your web pages. For Example a = 2 + 3 (where 2 and 3 are 2 random numbers) Session("Answer") = 5 then we…
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

728 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