• Advertisement

Archived

This topic is now archived and is closed to further replies.

Linking trouble with C++ classes

This topic is 6123 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Errr... I'm using DJGPP (gcc) with the RHIDE editor for compiling. However, whenever I try to use classes I get multiple definition errors... For example (several imaginary files): File useless.h:
    

#ifndef USELESS_INIT
#define USELESS_INIT


class useless
{
public:
  useless();
  void aFunction(int);

private:
  int aVar;
};

#endif

  
File useless.cpp:
  

#include "useless.h"


useless::useless()
{
  aVar = 0;
}

void useless::aFunction(int newVal);
{
  aVar = newVal;
  return;
}

  
File example.cpp:
  

#include "someclass.h"


int main()
{
  useless anObject;
  anObject.aFunction(3);

  return 0;
}

  
Pretty useless class mmm? ^_^ Each file will compile fine, but when I try to link the source files together, I get an error something like:
quote:
Error: useless.o: In function 'useless::useless(void)': useless.cpp(3) Error: multiple definition of 'useless::useless(void)' o:useless.cpp(3) Error: first defined here
for _every_ function in _every_ class. o_O What confuses me is that they compile and link fine with Bloodshed Dev-C++, so... What am I doing wrong? Any help would be greatly appreciated. Eck! Sorry for the long winded post.. Thanks in advance. Edited by - fairie on July 18, 2001 2:46:46 AM

Share this post


Link to post
Share on other sites
Advertisement
Guest Anonymous Poster
Well, good news; it isn''t your code. I copied those fake sample files and they compiled fine when I did it myself at the command line. However, when I did it in RHIDE, I got the same errors. I noticed that when RHIDE was doing the linking part (with the object files) it put someclass.o twice (like this: gcc -o something.exe example.o someclass.o someclass.o). You can solve this problem by NOT putting header files (just the source files) in your project (for example, this project would have only example.cpp and someclass.cpp and not someclass.h). It compiled with no errors after that. I''m not sure why RHIDE is like this, but I''m willing to bet that the docs say ''Don''t put header files in your project'' somewhere (I don''t use RHIDE, so I don''t know...)

Hope that helped!

Share this post


Link to post
Share on other sites
Ah! Thank you greatly! Apparently RHIDE doesn''t exclude header files from the linking process automatically, and they must be tagged as such manually. (I don''t normally use RHIDE either, but currently it is my only way of visually debugging: I haven''t gotten a handle on using the command line debugger with Bloodshed, and my attempts to get Insight have... well, I''ve never been able to find out how to get the proper files) I''m rather impressed at the speed of your reply, thanks for the help.

Share this post


Link to post
Share on other sites

  • Advertisement