ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
I am having a multiple definition error when I try to compile my program.
I'm not expecting anyone to look through each line of each file. It is just some people would like to know key information, and at the moment I have to finish up school which is taking up time, so I probably will not always be able to edit this post over and over again within a small period of time. Sorry for the inconvenience.
Source Files:
sc_functions.cpp - requires: sc_object.h : sc_obstacle.h
sc_game.cpp - requires: all the header files.
Here is my Makefile, followed by the source of all the files.
BTW, more than likely you don't need to see the whole of all class files, because someone on an IRC chatroom, told me that if I had any inline functions in my class files, but never responded back. So I thought maybe someone would just skim the functions prototypes and virtual functions to see if I have them or not for whatever reason.
I assumed that it may have been the problem, from the guy in the chatroom, though, the virtual functions, if I don't want to implement them by hand in each sub-class, would have to be inline. Since defining them outside the class would cause problems.
Here is the error output when I run make, which all it pretty much is saying is that
certain class functions were already defined in sc_function.cpp.:
Code:
$ make
g++ -g sc_functions.o sc_game.o -W -Wall -ansi `sdl-config --cflags --libs` -lSDL -lSDL_image -o sc_game
sc_game.o: In function `_scobject::_scobject()':
/home/george/SpaceCarnage/040107/sc_object.h:122: multiple definition of `_scobject::_scobject()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:122: first defined here
sc_game.o: In function `_scobject::_scobject()':
/home/george/SpaceCarnage/040107/sc_object.h:122: multiple definition of `_scobject::_scobject()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:122: first defined here
sc_game.o: In function `_scobject::chg_boxArea(int)':
/home/george/SpaceCarnage/040107/sc_object.h:133: multiple definition of `_scobject::chg_boxArea(int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:133: first defined here
sc_game.o: In function `_scobject::chg_clipImage(bool)':
/home/george/SpaceCarnage/040107/sc_object.h:134: multiple definition of `_scobject::chg_clipImage(bool)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:134: first defined here
sc_game.o: In function `_scobject::chg_viewable(bool)':
/home/george/SpaceCarnage/040107/sc_object.h:135: multiple definition of `_scobject::chg_viewable(bool)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:135: first defined here
sc_game.o: In function `_scobject::chg_position(short, short)':
/home/george/SpaceCarnage/040107/sc_object.h:137: multiple definition of `_scobject::chg_position(short, short)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:137: first defined here
sc_game.o: In function `_scobject::chg_perimeter(short, short)':
/home/george/SpaceCarnage/040107/sc_object.h:139: multiple definition of `_scobject::chg_perimeter(short, short)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:139: first defined here
sc_game.o: In function `_scobject::chg_type(int)':
/home/george/SpaceCarnage/040107/sc_object.h:140: multiple definition of `_scobject::chg_type(int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:140: first defined here
sc_game.o: In function `_scobject::chg_dir_x(int)':
/home/george/SpaceCarnage/040107/sc_object.h:141: multiple definition of `_scobject::chg_dir_x(int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:141: first defined here
sc_game.o: In function `_scobject::chg_dir_y(int)':
/home/george/SpaceCarnage/040107/sc_object.h:142: multiple definition of `_scobject::chg_dir_y(int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:142: first defined here
sc_game.o: In function `_scobject::chg_collision(bool)':
/home/george/SpaceCarnage/040107/sc_object.h:143: multiple definition of `_scobject::chg_collision(bool)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:143: first defined here
/home/george/SpaceCarnage/040107/sc_object.h:122: multiple definition of `_scobject::_scobject()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:122: first defined here
sc_game.o: In function `_scobject::chg_boxArea(int)':
/home/george/SpaceCarnage/040107/sc_object.h:133: multiple definition of `_scobject::chg_boxArea(int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:133: first defined here
sc_game.o: In function `_scobject::chg_clipImage(bool)':
/home/george/SpaceCarnage/040107/sc_object.h:134: multiple definition of `_scobject::chg_clipImage(bool)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:134: first defined here
sc_game.o: In function `_scobject::chg_viewable(bool)':
/home/george/SpaceCarnage/040107/sc_object.h:135: multiple definition of `_scobject::chg_viewable(bool)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:135: first defined here
sc_game.o: In function `_scobject::chg_position(short, short)':
/home/george/SpaceCarnage/040107/sc_object.h:137: multiple definition of `_scobject::chg_position(short, short)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:137: first defined here
sc_game.o: In function `_scobject::chg_perimeter(short, short)':
/home/george/SpaceCarnage/040107/sc_object.h:139: multiple definition of `_scobject::chg_perimeter(short, short)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:139: first defined here
sc_game.o: In function `_scobject::chg_type(int)':
/home/george/SpaceCarnage/040107/sc_object.h:140: multiple definition of `_scobject::chg_type(int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:140: first defined here
sc_game.o: In function `_scobject::chg_dir_x(int)':
/home/george/SpaceCarnage/040107/sc_object.h:141: multiple definition of `_scobject::chg_dir_x(int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:141: first defined here
sc_game.o: In function `_scobject::chg_dir_y(int)':
/home/george/SpaceCarnage/040107/sc_object.h:142: multiple definition of `_scobject::chg_dir_y(int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:142: first defined here
sc_game.o: In function `_scobject::chg_collision(bool)':
/home/george/SpaceCarnage/040107/sc_object.h:143: multiple definition of `_scobject::chg_collision(bool)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:143: first defined here
sc_game.o: In function `_scobject::get_boxArea()':
/home/george/SpaceCarnage/040107/sc_object.h:146: multiple definition of `_scobject::get_boxArea()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:146: first defined here
sc_game.o: In function `_scobject::get_clipImage()':
/home/george/SpaceCarnage/040107/sc_object.h:147: multiple definition of `_scobject::get_clipImage()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:147: first defined here
sc_game.o: In function `_scobject::get_viewable()':
/home/george/SpaceCarnage/040107/sc_object.h:148: multiple definition of `_scobject::get_viewable()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:148: first defined here
sc_game.o: In function `_scobject::get_position()':
/home/george/SpaceCarnage/040107/sc_object.h:149: multiple definition of `_scobject::get_position()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:149: first defined here
sc_game.o: In function `_scobject::get_perimeter()':
/home/george/SpaceCarnage/040107/sc_object.h:150: multiple definition of `_scobject::get_perimeter()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:150: first defined here
sc_game.o: In function `_scobject::get_type()':
/home/george/SpaceCarnage/040107/sc_object.h:151: multiple definition of `_scobject::get_type()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:151: first defined here
sc_game.o: In function `_scobject::get_dir_x()':
/home/george/SpaceCarnage/040107/sc_object.h:152: multiple definition of `_scobject::get_dir_x()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:152: first defined here
sc_game.o: In function `_scobject::get_dir_y()':
/home/george/SpaceCarnage/040107/sc_object.h:153: multiple definition of `_scobject::get_dir_y()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:153: first defined here
sc_game.o: In function `_scobject::get_collision()':
/home/george/SpaceCarnage/040107/sc_object.h:154: multiple definition of `_scobject::get_collision()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:154: first defined here
sc_game.o: In function `_scobject::move()':
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:143: first defined here
sc_game.o: In function `_scobject::get_boxArea()':
/home/george/SpaceCarnage/040107/sc_object.h:146: multiple definition of `_scobject::get_boxArea()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:146: first defined here
sc_game.o: In function `_scobject::get_clipImage()':
/home/george/SpaceCarnage/040107/sc_object.h:147: multiple definition of `_scobject::get_clipImage()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:147: first defined here
sc_game.o: In function `_scobject::get_viewable()':
/home/george/SpaceCarnage/040107/sc_object.h:148: multiple definition of `_scobject::get_viewable()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:148: first defined here
sc_game.o: In function `_scobject::get_position()':
/home/george/SpaceCarnage/040107/sc_object.h:149: multiple definition of `_scobject::get_position()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:149: first defined here
sc_game.o: In function `_scobject::get_perimeter()':
/home/george/SpaceCarnage/040107/sc_object.h:150: multiple definition of `_scobject::get_perimeter()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:150: first defined here
sc_game.o: In function `_scobject::get_type()':
/home/george/SpaceCarnage/040107/sc_object.h:151: multiple definition of `_scobject::get_type()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:151: first defined here
sc_game.o: In function `_scobject::get_dir_x()':
/home/george/SpaceCarnage/040107/sc_object.h:152: multiple definition of `_scobject::get_dir_x()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:152: first defined here
sc_game.o: In function `_scobject::get_dir_y()':
/home/george/SpaceCarnage/040107/sc_object.h:153: multiple definition of `_scobject::get_dir_y()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:153: first defined here
sc_game.o: In function `_scobject::get_collision()':
/home/george/SpaceCarnage/040107/sc_object.h:154: multiple definition of `_scobject::get_collision()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:154: first defined here
sc_game.o: In function `_scobject::move()':
/home/george/SpaceCarnage/040107/sc_object.h:158: multiple definition of `_scobject::move()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_object.h:158: first defined here
sc_game.o: In function `_scobstacle::_scobstacle()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:91: multiple definition of `_scobstacle::_scobstacle()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:91: first defined here
sc_game.o: In function `_scobstacle':
/home/george/SpaceCarnage/040107/sc_obstacle.h:91: multiple definition of `_scobstacle::_scobstacle()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:91: first defined here
sc_game.o: In function `_scobstacle::chg_blitSurface(SDL_Surface*)':
/home/george/SpaceCarnage/040107/sc_obstacle.h:100: multiple definition of `_scobstacle::chg_blitSurface(SDL_Surface*)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:100: first defined here
sc_game.o: In function `_scobstacle::chg_danger(bool)':
/home/george/SpaceCarnage/040107/sc_obstacle.h:101: multiple definition of `_scobstacle::chg_danger(bool)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:101: first defined here
sc_game.o: In function `_scobstacle::chg_attack(int)':
/home/george/SpaceCarnage/040107/sc_obstacle.h:102: multiple definition of `_scobstacle::chg_attack(int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:102: first defined here
sc_game.o: In function `_scobstacle::chg_hp(int)':
/home/george/SpaceCarnage/040107/sc_obstacle.h:103: multiple definition of `_scobstacle::chg_hp(int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:103: first defined here
sc_game.o: In function `_scobstacle::chg_addImageBack(int)':
/home/george/SpaceCarnage/040107/sc_obstacle.h:104: multiple definition of `_scobstacle::chg_addImageBack(int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:104: first defined here
sc_game.o: In function `_scobstacle::chg_rmImageBack(int)':
/home/george/SpaceCarnage/040107/sc_obstacle.h:105: multiple definition of `_scobstacle::chg_rmImageBack(int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:105: first defined here
sc_game.o: In function `_scobstacle::chg_loadImage(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)':
/home/george/SpaceCarnage/040107/sc_obstacle.h:108: multiple definition of `_scobstacle::chg_loadImage(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:108: first defined here
sc_game.o: In function `_scobstacle::chg_imageAddTime()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:117: multiple definition of `_scobstacle::chg_imageAddTime()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:117: first defined here
sc_game.o: In function `_scobstacle::chg_imageTimeGoal(unsigned int)':
/home/george/SpaceCarnage/040107/sc_obstacle.h:118: multiple definition of `_scobstacle::chg_imageTimeGoal(unsigned int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:118: first defined here
sc_game.o: In function `_scobstacle::chg_imageSpecifyTimeToAdd(unsigned int)':
/home/george/SpaceCarnage/040107/sc_obstacle.h:119: multiple definition of `_scobstacle::chg_imageSpecifyTimeToAdd(unsigned int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:119: first defined here
sc_game.o: In function `_scobstacle::show()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:122: multiple definition of `_scobstacle::show()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:122: first defined here
sc_game.o: In function `_scobstacle::get_images()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:135: multiple definition of `_scobstacle::get_images()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:135: first defined here
sc_game.o: In function `_scobstacle::get_blitSurface()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:136: multiple definition of `_scobstacle::get_blitSurface()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:136: first defined here
sc_game.o: In function `_scobstacle::get_dangerous()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:137: multiple definition of `_scobstacle::get_dangerous()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:137: first defined here
sc_game.o: In function `_scobstacle::get_attack()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:138: multiple definition of `_scobstacle::get_attack()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:138: first defined here
sc_game.o: In function `_scobstacle::get_hp()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:139: multiple definition of `_scobstacle::get_hp()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:139: first defined here
/home/george/SpaceCarnage/040107/sc_obstacle.h:108: multiple definition of `_scobstacle::chg_loadImage(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:108: first defined here
sc_game.o: In function `_scobstacle::chg_imageAddTime()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:117: multiple definition of `_scobstacle::chg_imageAddTime()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:117: first defined here
sc_game.o: In function `_scobstacle::chg_imageTimeGoal(unsigned int)':
/home/george/SpaceCarnage/040107/sc_obstacle.h:118: multiple definition of `_scobstacle::chg_imageTimeGoal(unsigned int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:118: first defined here
sc_game.o: In function `_scobstacle::chg_imageSpecifyTimeToAdd(unsigned int)':
/home/george/SpaceCarnage/040107/sc_obstacle.h:119: multiple definition of `_scobstacle::chg_imageSpecifyTimeToAdd(unsigned int)'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:119: first defined here
sc_game.o: In function `_scobstacle::show()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:122: multiple definition of `_scobstacle::show()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:122: first defined here
sc_game.o: In function `_scobstacle::get_images()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:135: multiple definition of `_scobstacle::get_images()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:135: first defined here
sc_game.o: In function `_scobstacle::get_blitSurface()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:136: multiple definition of `_scobstacle::get_blitSurface()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:136: first defined here
sc_game.o: In function `_scobstacle::get_dangerous()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:137: multiple definition of `_scobstacle::get_dangerous()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:137: first defined here
sc_game.o: In function `_scobstacle::get_attack()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:138: multiple definition of `_scobstacle::get_attack()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:138: first defined here
sc_game.o: In function `_scobstacle::get_hp()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:139: multiple definition of `_scobstacle::get_hp()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:139: first defined here
sc_game.o: In function `_scobstacle::get_currentImage()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:140: multiple definition of `_scobstacle::get_currentImage()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:140: first defined here
sc_game.o: In function `_scobstacle::get_imageTimeGoal()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:141: multiple definition of `_scobstacle::get_imageTimeGoal()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:141: first defined here
sc_game.o: In function `_scobstacle::get_imageTimeToAdd()':
/home/george/SpaceCarnage/040107/sc_obstacle.h:142: multiple definition of `_scobstacle::get_imageTimeToAdd()'
sc_functions.o:/home/george/SpaceCarnage/040107/sc_obstacle.h:142: first defined here
sc_functions.o:(.gnu.linkonce.r._ZTV11_scobstacle+0x10): undefined reference to `_scobstacle::chg_images()'
collect2: ld returned 1 exit status
make: *** [sc_game] Error 1
You've got a separate declaration and definition in the same file. You need to either declare and define in the same place, or move the definitions to a .c file.
I separated my header files so one is just the class declaration, and another header that contains the definitions. Here is what I get when I compile the program:
sc_object_def.h:5: error: virtual outside class declaration
//... and the same error for every virtual function.
This is a problem I had before. I can only get virtual functions working ({} ones, not ones with a = 0; ), ONLY if I make them inline. How can I fix this?
sc_object_def.h should be called sc_object.c. It shouldn't be #included anywhere, and the .h extension implies that the file should be #included.
Also, you can't use the keyword virtual when you define a method. Just take it out, the compiler knows the rest (you shouldn't use the keyword static either).
I don't have time at the moment to go into more detail but here is a couple of things I would just like to say.
Two of you headers seem to be the same.
Don't prefix with an underscore, these are reserved.
inline functions which are defined in a header and outside of the class body.
And my pet hate, get and set (or in this case chg_*) functions, what's the point of these?
Have a look at following as an example
Code:
struct
{
int type();
void type(int set_type);
};
No get and set required just function overloads.
In _scgame constructor you setup SDL and create the window yet don't check any return values, I really think you should and if it fails throw and exception.
Make constant functions const and look at returning references and refs to const.
#ifndef myClass_h_
#define myClass_h_
class myClass
{
public:
// myVirtFunc () gets defined more than once, if added to several source files.
virtual void myVirtFunc () { /* ... */ }
void myFunc ();
};
#endif
)
I know this may have already been known by the CPP gurus in this forum, but I like detailed explanation of what went wrong (posted by others) and how it was fixed, with example code (that I just shown). Just so if another me happens to fall into this same problem, and needs details.
Thanks everyone.
Last edited by RHLinuxGUY; 05-04-2007 at 01:59 AM.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.