An extern variable in C++ has
to have the following setup:
-
A declaration that will be visible to any module that wants to access that
variable. This comes in the form:
extern int g_iMyExternVariable; // Note that you cannot initialize the extern's
value here
-
The definition that describes which module will actually hold the data for the
real object. This has to be local for a single CPP file only, as you only want
to create a single object. This comes in the form:
int g_iMyExternVariable = 24; // Here you actually allocate the data and
initialize it to some value.
In your case, you have the
first requirement met in the cornwall.h header. However, the second one is
missing, and that's why the linker is telling you it can't find the actual
definition of the variable. Adding this line at the top of cornwall.cpp solves
the issue:
RendererContext
myRendererContext;
Now, one more note, a
RendererContext object is actually of type CRef, so in order to fill it with
the proper reference to the renderer context, you just do:
myRendererContext
= in_ctxt;
instead of:
RendererContext
myRendererContext(in_ctxt);
(which was only declaring a
local variable in the scope of the containing function).
Wessam Bahnassi
Microsoft DirectX MVP,
Programmer
Electronic Arts
--
'Talk is cheap because
supply exceeds demand'
So I am playing with the new Renderer API and am having trouble storing the
RendererContext globally and accessing it in another .cpp file. I first declare
this variable in an .h file to be included in other .cpp files. In one of the
required callbacks I attempt to define this variable by passing it the context
object that is being passed into the callback. I then attempt to use that
variable in my other .cpp file. What I end up getting is external linking
errors. I have attached my project and am hoping someone could look at the code
and share some insight as to why I can't get this to work. I have a feeling it
is a problem with my understanding of the 'extern' keyword, I am probably not
using it correctly hence my linking errors.
Thanks
Steven