# 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.

## 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 &lt;string&gt;
#include &lt;iostream&gt;

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 &lt;iostream&gt;
#include &lt;ctime&gt;
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&lt;&lt; "The "&lt;&lt;color&lt;&lt;" bow has been drawn." &lt;&lt;endl;
}
//fires the bow if drawn
int Bow::fire()
{
if(!drawn)
{
cout&lt;&lt; color &lt;&lt; " has not been drawn and therefore could not fire." &lt;&lt; endl;
return 0;
}
int score;
score = rand() % (10 - 0 + 1) + 0;
if(score == 0)
cout&lt;&lt;color&lt;&lt; " missed the target!!!" &lt;&lt;endl;
else
cout&lt;&lt; color &lt;&lt; " scored " &lt;&lt; score &lt;&lt; " points!!!" &lt;&lt;endl;
return score;
}

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

//test.cpp
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;ctime&gt;
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&lt;&lt; "The "&lt;&lt;color&lt;&lt;" bow has been drawn." &lt;&lt;endl;
}
//fires the bow if drawn
int Bow::fire()
{
if(!drawn)
{
cout&lt;&lt; color &lt;&lt; " has not been drawn and therefore could not fire." &lt;&lt; endl;
return 0;
}
int score;
score = rand() % (10 - 0 + 1) + 0;
if(score == 0)
cout &lt;&lt; color&lt;&lt; " missed the target!!!" &lt;&lt;endl;
else
cout &lt;&lt; color &lt;&lt; " scored " &lt;&lt; score &lt;&lt; " points!!!" &lt;&lt;endl;
return score;
}

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

//tests the bow class
void bowTest(void)
{
cout&lt;&lt;"yellow bow created"&lt;&lt;endl;
Bow yellow("yellow");
cout&lt;&lt;"attempting to fire yellow bow"&lt;&lt;endl;
yellow.fire();
cout&lt;&lt;"drawing the bow"&lt;&lt;endl;
yellow.draw();
cout&lt;&lt;"attempting to fire yellow bow"&lt;&lt;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 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 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 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 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 on other sites
Quote:
 Original post by deadstarPlease 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 on other sites
Quote:
Original post by korsen
Quote:
 Original post by deadstarPlease 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 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 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 on other sites
Quote:
 Original post by daviangelDo 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 on other sites
Quote:
Original post by korsen
Quote:
 Original post by daviangelDo 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 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 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.