By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,694 Members | 1,882 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,694 IT Pros & Developers. It's quick & easy.

one overload question

P: n/a
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
Share this Question
Share on Google+
6 Replies


P: n/a
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

P: n/a
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

P: n/a
"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

P: n/a
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

P: n/a
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

P: n/a

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