As programs get larger, it is not uncommon to split them into multiple files for organizational purposes. One advantage of working with an IDE is they make working with multiple files much easier. You already know how to create and compile single-file projects. Adding new files to existing projects is very easy.
In Visual Studio 2005 Express, right click on “Source Files” in the Solution Explorer window on the left, and choose Add -> New Item. Give the new file a name, and it will be added to your project.
In Code::Blocks, go to the file menu and choose “new file”. Give the new file a name, and Code::Blocks will ask you if you want to add it to the active project. Click “Yes”.
Compile your project just the same as before. Couldn’t be much easier!
Now, consider the following multiple-file program:
add.cpp:
int add(int x, int y)
{
return x + y;
}
main.cpp:
#include <iostream>
int main()
{
using namespace std;
cout << "The sum of 3 and 4 is: " << add(3, 4) << endl;
return 0;
}
Try compiling this program for yourself. You will note that it doesn’t compile, and it gives the same compiler error as the program in the previous lesson where the functions were declared in the wrong order:
add.cpp(10) : error C3861: 'add': identifier not found add.cpp(15) : error C2365: 'add' : redefinition; previous definition was 'formerly unknown identifier'
When the compiler is compiling a code file, it does not know about the existence of functions that live in any other files. This is done so that files may have functions or variables that have the same names as those in other files without causing a conflict.
However, in this case, we want main.cpp to know about (and use) the add() function that lives in add.cpp. To give main.cpp access to the add function, we can use a forward declaration:
main.cpp with forward declaration:
#include <iostream>
int add(int x, int y); // forward declaration using function prototype
int main()
{
using namespace std;
cout << "The sum of 3 and 4 is: " << add(3, 4) << endl;
return 0;
}
Now, when the compiler is compiling main.cpp, it will know what add is. Using this method, we can give files access to functions that live in another file. However, as programs grow larger and larger, it becomes tedious to have to forward declare every function you use that lives in a different file. To solve that problem, the concept of header files was introduced. We discuss header files in the lesson on header files.
Try compiling add.cpp and the main.cpp with the forward declaration for yourself. We will begin working with multiple files a lot once we get into object-oriented programming, so now’s as good a time as any to make sure you understand how to add and compile multiple file projects.
1.9 — Header files
|
Index
|
1.7 — Forward declarations
|
1.9 — Header files
Index
1.7 — Forward declarations
[...] global variables have program scope, they can be used across multiple files. In the section on programs with multiple files, you learned that in order to use a function declared in another file, you have to use a forward [...]
[...] Programs with multiple files [...]
I got an error using code blocks
objDebugmain.o||In function `main’:|
H:CPPmultimain.cpp|8|undefined reference to `add(int, int)’|
||=== Build finished: 1 errors, 0 warnings ===|
using the same code up there
edit: i fixed it i was using a C file not a CPP
wait it still doesn’t work same error as before
this is strange it just compiled perfectly and ran…
[...] 2007 Prev/Next Posts « 1.8 — Programs with multiple files | Home | 1.10 — A first look at the preprocessor » Sunday, June 3rd, 2007 at 9:29 [...]
[...] 2007 Prev/Next Posts « Recent news box for Tiga 1.0.2 theme (updated) | Home | 1.8 — Programs with multiple files » Saturday, June 2nd, 2007 at 3:01 [...]