one overload question

H

Hunter Hou

Hi,

I have this program, compiling is passed, but when i wanted to get the
executable file(g++ -o output input.o), it fails.

Who can lead me where the error is?

Thanks,
Hunter
===


#include <iostream>


class Rational {

public:

Rational( int par1 = 0, int par2 = 1 ): n( par1 ), d( par2 ) {}

void printRational( );


int getN() const { return n; }

int getD() const { return d; }

void setN( int par ) { n = par; }

void setD( int par ) { d = par; }

public:

friend const Rational& operator * ( const Rational& par1,
const Rational& par2 );

private:

int n, d;
};

const Rational& operator * ( const Rational& rat1, const Rational& rat2 )
{

// I know this solution is bad and there's a correct one, I just want to
try what Scott Mayers says.
static Rational result;

result.setN( rat1.getN() * rat2.getN() ) ;
result.setD( rat1.getD() * rat2.getD() ) ;

return result;
}

void Rational::printRational() {

std::cout << "the N is: " << n << "the D is: " << d << std::endl;

}


int main()
{

Rational rat1( 2, 3 ), rat2( 4, 5 );

Rational result = rat1 * rat2;

result.printRational();

return 0;

}


LocalRef.o(.text+0xba):LocalRef.cpp: undefined reference to
`std::basic_ostream said:
LocalRef.o(.text+0xe0):LocalRef.cpp: undefined reference to `std::cout'
LocalRef.o(.text+0xe5):LocalRef.cpp: undefined reference to
`std::basic_ostream said:
&, char const*)'
LocalRef.o(.text+0xee):LocalRef.cpp: undefined reference to
`std::eek:stream::eek:perator<<(int)'
LocalRef.o(.text+0xf7):LocalRef.cpp: undefined reference to
`std::basic_ostream said:
&, char const*)'
LocalRef.o(.text+0x100):LocalRef.cpp: undefined reference to
`std::eek:stream::eek:perator<<(int)'
LocalRef.o(.text+0x109):LocalRef.cpp: undefined reference to
`std::eek:stream::eek:perator<<(std::eek:stream& (*)(std::eek:stream&))'
LocalRef.o(.text+0x1a8):LocalRef.cpp: undefined reference to
`std::ios_base::Init::Init()'
LocalRef.o(.text+0x1c7):LocalRef.cpp: undefined reference to
`std::ios_base::Init::~Init()'
 
R

Rolf Magnus

Hunter said:
Hi,

I have this program, compiling is passed, but when i wanted to get the
executable file(g++ -o output input.o), it fails.

Who can lead me where the error is?


Why do you think this is an "overload question"? Anyway, it looks to me
as if your linker doesn't find the symbols of the standard library. Are
you sure you used g++ for linking, not gcc, and that you linked your
code using the same g++ version you compiled it with?
 
H

Hunter Hou

Rolf said:
Hunter Hou wrote:





Why do you think this is an "overload question"? Anyway, it looks to me
as if your linker doesn't find the symbols of the standard library. Are
you sure you used g++ for linking, not gcc, and that you linked your
code using the same g++ version you compiled it with?

In fact, I don't know if this is really caused by overload.
I've been using g++ of mingw and never run into such a confusing problem.
 
L

lallous

Hunter Hou said:
Hi,

I have this program, compiling is passed, but when i wanted to get the
executable file(g++ -o output input.o), it fails.

Who can lead me where the error is?

Thanks,
Hunter
===
LocalRef.o(.text+0xba):LocalRef.cpp: undefined reference to

LocalRef.o(.text+0xe0):LocalRef.cpp: undefined reference to `std::cout'
LocalRef.o(.text+0xe5):LocalRef.cpp: undefined reference to

LocalRef.o(.text+0xee):LocalRef.cpp: undefined reference to
`std::eek:stream::eek:perator<<(int)'
LocalRef.o(.text+0xf7):LocalRef.cpp: undefined reference to

LocalRef.o(.text+0x100):LocalRef.cpp: undefined reference to
`std::eek:stream::eek:perator<<(int)'
LocalRef.o(.text+0x109):LocalRef.cpp: undefined reference to
`std::eek:stream::eek:perator<<(std::eek:stream& (*)(std::eek:stream&))'
LocalRef.o(.text+0x1a8):LocalRef.cpp: undefined reference to
`std::ios_base::Init::Init()'
LocalRef.o(.text+0x1c7):LocalRef.cpp: undefined reference to
`std::ios_base::Init::~Init()'

I had this problem before, but didn't resolve yet.
Try this simple application and see if it compile / links too:

#include <iostream>

using namespace std;

int main()
{
cout << "Hello world!\n" << endl;
return 0;
}
 
R

Rolf Magnus

Hunter said:
In fact, I don't know if this is really caused by overload.
I've been using g++ of mingw and never run into such a confusing
problem.

The linker error message reports things like endl, cout and the stream
operators (actually everything from the standard library that you're
using) being missing. There seems to be no connection to the fact that
you're overloading operator*.
 
H

Hunter Hou

lallous wrote:

I had this problem before, but didn't resolve yet.
Try this simple application and see if it compile / links too:

#include <iostream>

using namespace std;

int main()
{
cout << "Hello world!\n" << endl;
return 0;
}

My test.cpp is as exactly same as yours, it works.That's why the above
error is confusing me.

Hunter
 
J

John Harrison

Hunter Hou said:
lallous wrote:



My test.cpp is as exactly same as yours, it works.That's why the above
error is confusing me.

OK well start taking the obvious troubleshooting steps. Gradually cut out
code from the program that doesn't work, until you have a hello world
program. When it starts working again you know that the last thing you
removed was the problem.

Personally I don't think there is anything wrong with your code, I would
expect there is something wrong with the way you are compiling and linking
your program or something wrong with the way you have installed your
compiler.

John
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,899
Latest member
RodneyMcAu

Latest Threads

Top