469,898 Members | 1,611 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,898 developers. It's quick & easy.

one overload question

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<char, std::char_traits<char> >& std::endl<char,
std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char>
&)' LocalRef.o(.text+0xe0):LocalRef.cpp: undefined reference to `std::cout'
LocalRef.o(.text+0xe5):LocalRef.cpp: undefined reference to
`std::basic_ostream<char, std::char_traits<char> >& std::operator<<
<std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char>&, char const*)' LocalRef.o(.text+0xee):LocalRef.cpp: undefined reference to
`std::ostream::operator<<(int)'
LocalRef.o(.text+0xf7):LocalRef.cpp: undefined reference to
`std::basic_ostream<char, std::char_traits<char> >& std::operator<<
<std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char>&, char const*)'

LocalRef.o(.text+0x100):LocalRef.cpp: undefined reference to
`std::ostream::operator<<(int)'
LocalRef.o(.text+0x109):LocalRef.cpp: undefined reference to
`std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
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()'


Jul 22 '05 #1
6 1515
Hunter Hou wrote:
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?

Jul 22 '05 #2
Rolf Magnus wrote:
Hunter Hou wrote:

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?


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.
Jul 22 '05 #3
"Hunter Hou" <hy***@lucent.com> wrote in message
news:ca********@netnews.proxy.lucent.com...
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
=== <snip>
LocalRef.o(.text+0xba):LocalRef.cpp: undefined reference to
`std::basic_ostream<char, std::char_traits<char> >& std::endl<char,
std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char>
&)'

LocalRef.o(.text+0xe0):LocalRef.cpp: undefined reference to `std::cout'
LocalRef.o(.text+0xe5):LocalRef.cpp: undefined reference to
`std::basic_ostream<char, std::char_traits<char> >& std::operator<<
<std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char>
&, char const*)'

LocalRef.o(.text+0xee):LocalRef.cpp: undefined reference to
`std::ostream::operator<<(int)'
LocalRef.o(.text+0xf7):LocalRef.cpp: undefined reference to
`std::basic_ostream<char, std::char_traits<char> >& std::operator<<
<std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char>
&, char const*)'

LocalRef.o(.text+0x100):LocalRef.cpp: undefined reference to
`std::ostream::operator<<(int)'
LocalRef.o(.text+0x109):LocalRef.cpp: undefined reference to
`std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
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;
}

--
Elias
Jul 22 '05 #4
Hunter Hou wrote:
Rolf Magnus wrote:
Hunter Hou wrote:

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?


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

Jul 22 '05 #5
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;
}

--
Elias


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

Hunter
Jul 22 '05 #6

"Hunter Hou" <hy***@lucent.com> wrote in message
news:ca********@netnews.proxy.lucent.com...
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;
}

--
Elias


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
Jul 22 '05 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

5 posts views Thread by bsaucer | last post: by
9 posts views Thread by Mario Charest | last post: by
13 posts views Thread by Tony Johansson | last post: by
17 posts views Thread by Chris | last post: by
10 posts views Thread by shachar | last post: by
3 posts views Thread by needin4mation | last post: by
5 posts views Thread by richard.parker | last post: by
1 post views Thread by v4vijayakumar | last post: by
1 post views Thread by Waqarahmed | last post: by
reply views Thread by Salome Sato | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.