Sign in to follow this  

Source code from book not working!!!

This topic is 3556 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

For those new to the thread, please see my reply before viewing the source code below for the sake of an updated problem I need to start reading my book all over again because i'm so confused and lost now because this has been eating at me for a while - how does source code from a book not work??? I'll provide the code and errors below. It either won't compile, or won't link: (Using Visual Studio .NET 2008 btw)
//classes.h
#include <string>
#include <iostream>

using namespace std;
class Bow
{
     //data member declarations
     string color;
     bool drawn;
     int numOfArrows;
public:     
     Bow(string aColor);   //constructor
     ~Bow();                    //destructor
     
     //methods
     void draw();
     int fire();
};

------------------------------------------------------

//classes.cpp
#include "classes.h"
#include <iostream>
#include <ctime>
using namespace std;

Bow::Bow(string aColor)
{
     numOfArrows = 10;
     drawn = false;
     color = aColor;
     srand((unsigned)time(0)); //seeds the time (we need the rand() function in the fire() method)
}

Bow::~Bow()
{
}

//draws the bow
void Bow::draw()
{
     drawn = true;
     cout<< "The "<<color<<" bow has been drawn." <<endl;
}
//fires the bow if drawn
int Bow::fire()
{
     if(!drawn)
     {
          cout<< color << " has not been drawn and therefore could not fire." << endl;
          return 0;
     }
     int score;
     score = rand() % (10 - 0 + 1) + 0;
     if(score == 0)
          cout<<color<< " missed the target!!!" <<endl;
     else
          cout<< color << " scored " << score << " points!!!" <<endl;
     return score;
}

-----------------------------------------------

//test.cpp
#include <iostream>
#include <string>
#include <ctime>
using namespace std; 
     
int main( void );
void bowTest(void);

class Bow
{
     //data member declarations
     string color;
     bool drawn;
     int numOfArrows;
public:     
     Bow(string aColor);   //constructor
     ~Bow();                    //destructor
     
     //methods
     void draw();
     int fire();
};


Bow::Bow(string aColor)
{
     numOfArrows = 10;
     drawn = false;
     color = aColor;
     srand((unsigned)time(0)); //seeds the time (we need the rand() function in the fire() method)
}

Bow::~Bow()
{
}

//draws the bow
void Bow::draw()
{
     drawn = true;
	 cout<< "The "<<color<<" bow has been drawn." <<endl;
}
//fires the bow if drawn
int Bow::fire()
{
     if(!drawn)
     {
          cout<< color << " has not been drawn and therefore could not fire." << endl;
          return 0;
     }
     int score;
     score = rand() % (10 - 0 + 1) + 0;
     if(score == 0)
		 cout << color<< " missed the target!!!" <<endl;
     else
          cout << color << " scored " << score << " points!!!" <<endl;
     return score;
}


//the main function
int main( void )
{
     bowTest();
     return 0;
}

//tests the bow class
void bowTest(void)
{
     cout<<"yellow bow created"<<endl;
     Bow yellow("yellow");
     cout<<"attempting to fire yellow bow"<<endl;
     yellow.fire();
     cout<<"drawing the bow"<<endl;
     yellow.draw();
     cout<<"attempting to fire yellow bow"<<endl;
     yellow.fire();
}


----------------------------------------------------- The above uses <string> in test.cpp and generates the following errors: 1>------ Build started: Project: classes, Configuration: Debug Win32 ------ 1>Compiling... 1>test.cpp 1>Linking... 1>test.obj : error LNK2005: "public: __thiscall Bow::Bow(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0Bow@@QAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) already defined in classes.obj 1>test.obj : error LNK2005: "public: __thiscall Bow::~Bow(void)" (??1Bow@@QAE@XZ) already defined in classes.obj 1>test.obj : error LNK2005: "public: void __thiscall Bow::draw(void)" (?draw@Bow@@QAEXXZ) already defined in classes.obj 1>test.obj : error LNK2005: "public: int __thiscall Bow::fire(void)" (?fire@Bow@@QAEHXZ) already defined in classes.obj 1>C:\Users\Korsen\Documents\Visual Studio 2008\Projects\classes\Debug\classes.exe : fatal error LNK1169: one or more multiply defined symbols found 1>Build log was saved at "file://c:\Users\Korsen\Documents\Visual Studio 2008\Projects\classes\classes\Debug\BuildLog.htm" 1>classes - 5 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== Using the above without <string> which is the EXACT CODE from the book, generates the following (repeat the same code 4x for different lines in which the same cout << color << etc is used: (Erased to just the errors for the sake of this post) 1>------ Build started: Project: classes, Configuration: Debug Win32 ------ 1>Compiling... 1>test.cpp 1>c:\users\korsen\documents\visual studio 2008\projects\classes\classes\test.cpp(41) : error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion) 1>Build log was saved at "file://c:\Users\Korsen\Documents\Visual Studio 2008\Projects\classes\classes\Debug\BuildLog.htm" 1>classes - 4 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== Please help. I'm trying to learn how to build my own engine, or at least learn how to manipulate one to create my own game. Thanks in advance. EDIT: Reading this code, it looks like it should be two different programs... am I just missing something here? (Be gentle) Basically no matter what way i try to build the code, no matter which files, i end up getting an error one way or another and i'm ready to literally rip my hair out. [Edited by - korsen on March 24, 2008 12:03:49 AM]

Share this post


Link to post
Share on other sites
Please edit your post and put the code in [ source ] [ /source ] tags :)

Code from books might not work on certain compilers. How old is the book? Is there a back page saying which compiler is was tested with?

Also, some books have a website address where they post updates and correct mistakes. Take a look at the back pages.

Share this post


Link to post
Share on other sites
it doesnt seem like classes.cpp is being compiled or in your project, but I could be wrong. Someone will come by and give this a sersious look don't worry.

Share this post


Link to post
Share on other sites
Quote:
it doesnt seem like classes.cpp is being compiled or in your project, but I could be wrong. Someone will come by and give this a sersious look don't worry.

He is compiling both classes.cpp and test.cpp, which is where the problem is at as they both define the same thing.

Quote:
EDIT: Reading this code, it looks like it should be two different programs... am I just missing something here? (Be gentle)

You are linking test.cpp (test.obj) and classes.cpp (classes.h), both which define the same thing (hence the "already defined in" linker errors.

Share this post


Link to post
Share on other sites
I noticed that. I removed the classes.cpp from my project and left only the .h and the test.cpp file and i still got the same error (bottom error of the two i posted)

EDIT: Which two files should i be using and what should i name them? Because trying to include classes.h in the test.cpp generates 24 errors.

EDIT2: Using JUST the test.cpp generates the same error (bottom error of the two i posted)

EDIT3: Using the first two files (classes.h and classes.cpp) gives me these two errors:

1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
1>C:\Users\Korsen\Documents\Visual Studio 2008\Projects\classes\Debug\classes.exe : fatal error LNK1120: 1 unresolved externals

I feel as big as this period. from all these errors bombarding me.

Share this post


Link to post
Share on other sites
Quote:
Original post by deadstar
Please edit your post and put the code in [ source ] [ /source ] tags :)

Code from books might not work on certain compilers. How old is the book? Is there a back page saying which compiler is was tested with?

Also, some books have a website address where they post updates and correct mistakes. Take a look at the back pages.


No backpages with any such information.

Share this post


Link to post
Share on other sites
Quote:
Original post by korsen
Quote:
Original post by deadstar
Please edit your post and put the code in [ source ] [ /source ] tags :)

Code from books might not work on certain compilers. How old is the book? Is there a back page saying which compiler is was tested with?

Also, some books have a website address where they post updates and correct mistakes. Take a look at the back pages.


No backpages with any such information.


Any chance of the name of the book? I'm sure one of us may own it.

(And I notice you tried the source tags, you need to remove the spaces, I only put those in to demonstrate without them actually MAKING a source box. My mistake)

Share this post


Link to post
Share on other sites
Do yourself a favor and get the Mike Dawson C++ book if you are new to C++ and just starting out.
I also tried learning C++ from that book before I knew any better and spent 1/2 my time trying to get the code in that book to compile.
It was written with VC++ 6 from what I remember so it doesn't even follow the new for loop scope rules.
I could go dig up my copy and look to see if I wrote down any notes on how to fix the errors but I'm eating right now.
This review
mentions but a couple of the problems with this book.


[Edited by - daviangel on March 24, 2008 4:25:24 AM]

Share this post


Link to post
Share on other sites
Name is C++ Programming for the absolute beginner by Dirk Henkemans and Mark Lee.

It's an awesome learning tool up until chapter 5 where this crap hits me in the face like an old woman with bricks in her purse. I was breezing through the first 4 chapters within a week and it was great because of the whole gaming reference it uses throughout the book. Now i'm a bit lost.

I might just get the book so I don't waste anymore time... cause i've got 14 other books waiting to be read because i'm stuck on this one.

Share this post


Link to post
Share on other sites
Quote:
Original post by daviangel
Do yourself a favor and get the Mike Dawson C++ book if you are new to C++ and just starting out.
I also tried learning C++ from that book before I knew any better and spent 1/2 my time trying to get the code in that book to compile.
It was written with VC++ 6 from what I remember so it doesn't even follow the new for loop scope rules.
I could go dig up my copy and look to see if I wrote down any notes on how to fix the errors but I'm eating right now.


I found these two books:
This is from 2004
http://www.amazon.com/Beginning-C%2B%2B-Game-Programming-Development/dp/1592002056/ref=sr_1_8?ie=UTF8&s=books&qid=1206334835&sr=1-8
This is from Dec 2005 (so basically 2006)
http://www.amazon.com/Microsoft-Express-Programming-Absolute-Beginner/dp/159200816X/ref=sr_1_2?ie=UTF8&s=books&qid=1206334983&sr=1-2

would either be a good pick? if not, does anyone have excellent suggestions for something that's not anymore dry than the sahara? i really liked this book till it started giving me trouble.

I noticed the book i'm using is from 2000 :(

Share this post


Link to post
Share on other sites
Quote:
Original post by korsen
Quote:
Original post by daviangel
Do yourself a favor and get the Mike Dawson C++ book if you are new to C++ and just starting out.
I also tried learning C++ from that book before I knew any better and spent 1/2 my time trying to get the code in that book to compile.
It was written with VC++ 6 from what I remember so it doesn't even follow the new for loop scope rules.
I could go dig up my copy and look to see if I wrote down any notes on how to fix the errors but I'm eating right now.


I found these two books:
This is from 2004
http://www.amazon.com/Beginning-C%2B%2B-Game-Programming-Development/dp/1592002056/ref=sr_1_8?ie=UTF8&s=books&qid=1206334835&sr=1-8
This is from Dec 2005 (so basically 2006)
http://www.amazon.com/Microsoft-Express-Programming-Absolute-Beginner/dp/159200816X/ref=sr_1_2?ie=UTF8&s=books&qid=1206334983&sr=1-2

would either be a good pick? if not, does anyone have excellent suggestions for something that's not anymore dry than the sahara? i really liked this book till it started giving me trouble.

I noticed the book i'm using is from 2000 :(

Yup! the first one is good. It's the same Dawson book I mentioned above.
It covers all the C++ basics you'll need as a beginner and is not dry/dull/boring like 99% of other recommended books.

[Edited by - daviangel on March 24, 2008 11:42:32 PM]

Share this post


Link to post
Share on other sites
I just copied "test.cpp" into a new project and it compiled fine with Visual C++ 2008 Express Edition. I would recommend creating a completely new project and just using that file. Make sure you include <string> or cout wont understand how to print strings out to the console.

Sometimes books can be a little confusing about the changes made to the code. A lot of the time though, they include CDs with the code from the book on them. If there is one try to find the code he uses from this chapter. I would guess that he was trying to move the definition of Bow out of test.cpp into their own files to show you some organization techniques.

Share this post


Link to post
Share on other sites

This topic is 3556 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.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this