I'm quite new to programming in general and more specifically to c++. I've made a program using the following files:
my.h
extern int foo;
void print_foo();
my.cpp
#include <iostream>
#include "my.h"
void print_foo(){
std::cout << "foo = " << foo <<std::endl;
}
use.cpp
#include "my.h"
int main(){
int foo = 7;
print_foo();
}
When i try to compile it I get the error message 'undefined reference to `foo'', but when i define foo outside of my main() function like below, it works just fine. Why is that?
use.cpp
#include "my.h"
int foo;
int main(){
foo = 7;
print_foo();
}
When i try to compile it I get the error message 'undefined reference to `foo''
Because when you define foo
inside main
, it is local to the main function. But the foo
that you use inside print_foo
is a global foo
which you've not defined(globally).
Basically, extern int foo;
(in your program) declares a global variable named foo
and the foo
used inside print_foo
is the globally declared foo
which you never define.
but when i define foo outside of my main() function like below, it works just fine
In this case, since you've defined foo
globally and since foo
inside print_foo
refers to the globally declared foo
, the program works as expected since a global definition of foo
is available in this case.