Hello: I'm coding in C++ for ARM for the first time, using Keil. I'm working in a project that already exists but I need to make some changes. I cannot change the libraries or the file's structure. The test_1 and test_2 functions use a global object and I cannot change it. Problem is, the code was created to run each test in an independent compilation, but now I need to create a menu for all the tests in a single project.
I'm having problems with the use of a global object. I want to instantiate one object in a .cpp file and use it in another .cpp file (using extern), but linker keep sayng that the object was multiple defined.
Any idea how to solve it?
Thanks.
---My project:
Library File:
// myclass.h: class myclass{ ....
Header for tests 1
// test_1.h #ifndef TST1_H #define TST1_H void test_1(void); extern myclass mc(0); // extern declaration #endif
Tests file 1
//test_1.cpp #include "my_lib.h" #include "test_1.h" myclass mc(0); void test_1(void){ mc.func1(); mc.func2(); ... }
Header for tests 2
// test_2.h #ifndef TST2_H #define TST2_H void test_2(void); extern myclass mc(0); #endif
Tests file 2
//test_2.cpp #include "my_lib.h" #include "test_2.h" void test_2(void){ mc.func1(); mc.func2(); ... }
Main cpp file
// main.cpp #include "my_lib.h" #include "test_1.h" #include "test_2.h" void main(void){ // menu for tests... ... case 1: test_1(); break; case 2: test_2(); break; }
Thanks for your insights Hans. I believe the line you pointed is a definition beacuse the initialization value "0", right? I cannot change this class and the code don't compile without a value there. The problem with this code is that the functions Test_1, Test_2, etc... and some IRQ functions uses this object as global and I cannot change the code. Thanks, Rods
What error are you getting why you declare it like this?
extern myclass mc; // extern declaration
I cannot change this class and the code don't compile without a value there.
Doesn't compile, or doesn't link? The distinction is crucial. And what is "this class" that you cannot change?
Hello Robert: That was the problem! I reviwed the code and instead of
extern myclass mc;
I was using
extern myclass mc();
. I was confusing object with function. Thank you very much for your help.
Regards Rods
Hello Hans: The code was not linking. Now I corrected it and it is compiling, linking and running.
Thanks you very much for your help
regards Rods