C++ How to invoke an object's method in a different file

  • #1
Bob Walance
Insights Author
Gold Member
77
47
TL;DR Summary
In C++, how to run a method from an object that was created in a separate file.
I have created an object for the class Timers in timer_functions.cpp, and I need to run a method associated with that object ( test_method() ) from interrupts.cpp.

I've tried many things but have been unsuccessful. Any ideas would be appreciated. Here is some sample code:

classes.hpp
C++:
   #pragma once
   class Timers {
   public:
     void test_method(void);
   private:
     int testVariable;
   };

classes.cpp
C++:
#include classes.hpp
   void Timers::test_method(void) {
     testVariable++;
   }

timer_functions.cpp
C++:
#include classes.hpp
   Timers myTimerObject; // create the object
interrupts.cpp
C++:
#include classes.hpp
   extern Timers myTimerObject; // this doesn't eliminate the build error
   void timer_interrupt(void) {
     myTimerObject.test_method(); // trying to run the objects method, but BUILD ERROR
   }
 
Last edited by a moderator:
Technology news on Phys.org
  • #2
I'm not clear on what you are trying to do, and how things are split up. Normally, if you have a class foo, there is a header foo.hh and the actual code in foo.cc. If I have code bar.cc, it includes foo.hh, and the linker links foo.o and bar.o.

I don't see how your snippets match to this, but you seem to be creating an instance of an object in one file and using it in another. That shouldn't work - it shouldn't even compile, because the object isn't even declared in the second file. (And if it is declared, how does the compiler know it is supposed to be the same as in the first?)

Normally code would create the object and pass it to other code through a pointer to that object. The same code that created it should destroy it when it is no longer needed,
 
  • #3
Vanadium 50 said:
I'm not clear on what you are trying to do, and how things are split up. Normally, if you have a class foo, there is a header foo.hh and the actual code in foo.cc. If I have code bar.cc, it includes foo.hh, and the linker links foo.o and bar.o.

I don't see how your snippets match to this, but you seem to be creating an instance of an object in one file and using it in another. That shouldn't work - it shouldn't even compile, because the object isn't even declared in the second file. (And if it is declared, how does the compiler know it is supposed to be the same as in the first?)

Normally code would create the object and pass it to other code through a pointer to that object. The same code that created it should destroy it when it is no longer needed,
I don't want to create and destroy the instance for each periodic timer interrupt. While this would probably work, it seems messy.

A pointer to the instance could be created in timer_functions.cpp, but how would it get passed to the timer interrupt?
 
  • #4
Bob Walance said:
I don't want to create and destroy the instance for each periodic timer interrupt. While this would probably work, it seems messy.

A pointer to the instance could be created in timer_functions.cpp, but how would it get passed to the timer interrupt?
If you intend to have only a single (global) instance of Timers, then you can use a "static" instance. In that case, read up on static class variables and static member fns.

Of course, if you do indeed intend that, then why call it "Timers" (plural) instead of "Timer" singular?
 
  • Like
Likes Vanadium 50 and Bob Walance
  • #5
strangerep said:
If you intend to have only a single (global) instance of Timers, then you can use a "static" instance. In that case, read up on static class variables and static member fns.
Wow. That works!

Yes, a single instance of the class (really it's no instance) is just fine for my application.

Thank you for the simple solution.
 

1. How do I invoke an object's method in a different file in C++?

To invoke an object's method in a different file in C++, you can use the scope resolution operator (::) to access the method from the object's class. For example, if the method is named "myMethod" and the object is named "myObject", you can invoke the method in a different file by using "myObject::myMethod()".

2. Can I invoke a private method of an object in a different file in C++?

No, private methods are only accessible within the class in which they are declared. If you want to invoke a private method of an object in a different file, you can declare the method as public or use a friend function.

3. How do I pass parameters when invoking an object's method in a different file in C++?

To pass parameters when invoking an object's method in a different file in C++, you can use the same syntax as when calling a method within the same file. Simply include the parameters within the parentheses after the method name, separated by commas.

4. What happens if I invoke a method of an object that has not been instantiated in a different file in C++?

If you invoke a method of an object that has not been instantiated in a different file in C++, it will result in an error. Objects must be instantiated before their methods can be invoked.

5. Can I invoke methods of multiple objects in a different file in C++?

Yes, you can invoke methods of multiple objects in a different file in C++. Simply use the scope resolution operator (::) to access the methods from their respective classes and separate the method calls with a semicolon.

Similar threads

  • Programming and Computer Science
Replies
8
Views
1K
  • Programming and Computer Science
Replies
6
Views
811
  • Programming and Computer Science
Replies
3
Views
2K
  • Programming and Computer Science
Replies
25
Views
1K
  • Programming and Computer Science
Replies
5
Views
749
  • Programming and Computer Science
2
Replies
35
Views
2K
  • Programming and Computer Science
Replies
1
Views
1K
  • Programming and Computer Science
Replies
14
Views
1K
  • Programming and Computer Science
3
Replies
89
Views
4K
  • Programming and Computer Science
Replies
3
Views
1K
Back
Top