C++ coding standarts and how to structure "bigger" projects

  • Thread starter Mikkel christensen
  • Start date
M

Mikkel christensen

Hi there


I wonder if any of you could point me in a direction where I can find some
usefull information about coding standarts.

I have some generel experiense in programming but I lack many things
specific to C++.
One thing that causes me many troubles is how to properly nest "#include
'filename'" statements in combination with the "#pragma once" directive and
"using namespace".

I have one specific project containing ~15 header files and as many saource
files which gives me trouble when the compiler starts linking.
"unresolved externals" showing all the time. Compiling each file on it's own
does not show any errors.

Each file has it's own class, and pointers to some of the classes are given
to them so they can use each other (one file combines it all and creates
objects and pointers to them).
I know these problems occour because my understanding of how to structure
bigger (well for me this is "bigger" than I'm used to) projects are
insufficient.
I have not been able to find any usefull information regarding this topic
though I've been searching google all day.

This project are made in VC++ 7 but as far as I'm concerned the compiler
should not matter at all as long as I'm using the right coding standarts.
I might add that the project would previously compile just fine using GCC
but then terminate upon execution when one class member tries to access
public data in another class through it's pointer.

This shows me I need some general knowledge about projects with multiple
files that include each other.

I hope some of you can point me in direction towards the shining bright
light:)


- Mikkel
 
V

Victor Bazarov

Mikkel christensen said:
I wonder if any of you could point me in a direction where I can find some
usefull information about coding standarts.
[...]

This shows me I need some general knowledge about projects with multiple
files that include each other.

I hope some of you can point me in direction towards the shining bright
light:)

I'd probably start with microsoft.public.vc.project_mgt newsgroup.

There are good books on VC++ as well (alas, I don't remember the titles,
the same newsgroup or m.p.vc.language should help you with that)

V
 
J

John Harrison

Mikkel christensen said:
Hi there


I wonder if any of you could point me in a direction where I can find some
usefull information about coding standarts.

I have some generel experiense in programming but I lack many things
specific to C++.
One thing that causes me many troubles is how to properly nest "#include
'filename'" statements in combination with the "#pragma once" directive
and
"using namespace".

I have one specific project containing ~15 header files and as many
saource
files which gives me trouble when the compiler starts linking.
"unresolved externals" showing all the time. Compiling each file on it's
own
does not show any errors.

Each file has it's own class, and pointers to some of the classes are
given
to them so they can use each other (one file combines it all and creates
objects and pointers to them).
I know these problems occour because my understanding of how to structure
bigger (well for me this is "bigger" than I'm used to) projects are
insufficient.

This is too big a topic to reply to in a newsgroup post.

Do you know what should go into a header file and what shouldn't? Do you
know the difference between a declaration and a definition (this seems to be
the commonest mistake). Do you know never to include one source file inside
another? Do you know that each header file should include the other header
files it needs to compile if it is the first header file included in a
source file? Do you know how to use include guards? Apparently not since you
are using the non-standard #pragma once, you should use include guards
instead. Do you know never to use 'using namespace' inside a header file?
Could you post a sample header file from your code. It would really help to
have some specifics to work on.

If any of the above seems interesting or surprising then respond and I'll
try an focus in on the specific areas you are having problems with.

And post some code!!!

john
 
J

Jesper Madsen

Just to comment on a few of your problems...

<You wrote..
I have one specific project containing ~15 header files and as many saource
files which gives me trouble when the compiler starts linking.
"unresolved externals" showing all the time. Compiling each file on it's
own
does not show any errors.
And the reasons you can compile each file by itself, is that you do not
link...
The linker is the one complaining about "Unresolved externals" or
"unresolved symbols"...
My guess is, there is some kind og namespace conflict... One difference
between compilers I could think of is,
wether or not they what all members defined, even if they are not used in
the application. I think VC7.net wants
them defined, do not know about gcc though... (and I do not know if the
standard has anything on this)

With namespaces, be sure to structure your files so all #includes are
outside namespaces...


header file: "SomeCollectionOfSomeSort.h"
#pragma once

#include "MySpecial.h"

namespace Flanhart {
class SomeCollectionOfSomeSort {
public:
SomeCollectionOfSomeSort();
};

}//end namespace Flanhart

implementation file:"SomeCollectionOfSomeSort.cpp"

//include here - first the file you are implementing
#include "SomeCollectionOfSomeSort.h"

//include dependencies here

namespace Flanhart {
//implement here
SomeCollectionOfSomeSort::SomeCollectionOfSomeSort() {
//DoStuff
}

}//end namespace Flanhart


So do not try to #include anything while you are in a namespace, since the
header file itself states it is in a namespace.. If you cannot figure it
out, try removing all namespaces, and check if you can build, if you cannot,
then it is not a namespaces, but probably access to libraries or access to
your own unimplemented functions/methods/(statics)...

Hope this will help you

Jesper Madsen
 
G

Gianni Mariani

Mikkel said:
I wonder if any of you could point me in a direction where I can find some
usefull information about coding standarts.

I have yet to see one single coding standard document that I agree with
(now) - even ones I wrote myself.

Project requirements change, tools change (and get better).

For example, at one point, my coding standard was to not use namespaces.
(because at the time the compilers and debuggers did not support them
well, this is no longer the case).

Exceptions are still in my grey area. Having used them in a recent
project, I found them both useful and generally more difficult to debug
in some cases.

The things that remain in my (unwritten) coding standard are benign
things like indentation etc. The rest are based on requrements of the
project.

Much of it is driven by a "Test Driven Design" (aka TDD) process where
the final design deliverables are interfaces and unit tests and peer
review is done on the unit tests themselves.
I have some generel experiense in programming but I lack many things
specific to C++.
One thing that causes me many troubles is how to properly nest "#include
'filename'" statements in combination with the "#pragma once" directive and
"using namespace".

The most portable thing is to use guards, e.g.

----- file.h -----

#ifndef x__file_h__x
#define x__file_h__x 1

.... stuff goes here ...

#endif // x__file_h__x

------------------

If you look at austria C++ you'll see what I mean.
http://austria.sourceforge.net/dox/html/at__lifetime_8h-source.html
I have one specific project containing ~15 header files and as many saource
files which gives me trouble when the compiler starts linking.
"unresolved externals" showing all the time. Compiling each file on it's own
does not show any errors.

Are you targetting more than MS ? If so you might want to look at a
cross platform build system.
Each file has it's own class, and pointers to some of the classes are given
to them so they can use each other (one file combines it all and creates
objects and pointers to them).

I'm not understanding what you want to say.
I know these problems occour because my understanding of how to structure
bigger (well for me this is "bigger" than I'm used to) projects are
insufficient.
I have not been able to find any usefull information regarding this topic
though I've been searching google all day.

This project are made in VC++ 7 but as far as I'm concerned the compiler
should not matter at all as long as I'm using the right coding standarts.
I might add that the project would previously compile just fine using GCC
but then terminate upon execution when one class member tries to access
public data in another class through it's pointer.

This shows me I need some general knowledge about projects with multiple
files that include each other.

I hope some of you can point me in direction towards the shining bright
light:)

Take a look at how Austria C++ is organized - It uses MakeXS as it's
build tool which can be made to generate VC++ project files as well as
build on platforms that use GNU make. It works with cygwin under Win32.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,013
Latest member
KatriceSwa

Latest Threads

Top