Re: [Dev-C++] Getting the wrong output
- From: Per Westermark <pwm iapetus neab net>
- To: jalkadir gosonic ca
- Cc: dev-cpp-users lists sourceforge net, gtk-list gnome org
- Subject: Re: [Dev-C++] Getting the wrong output
- Date: Thu, 30 Jun 2005 18:54:34 +0200 (CEST)
std::xx is for symbols declared inside of the std namespace. Your own
operator is definitely not defined in the std namespace - and you should
never try to define anyting in that namespace. It is only used for
standardized variables, types, methods etc.
You only add the xx:: prefix to a symbol when referencing symbols outside
of the current namespace or any namespace you have specifically said you
are using.
If you don't use any namespaces yourself, just write:
friend std::ostream& operator<<(std::ostream&,const jme::Money&);
std::ostream& operator<<(std::ostream& os,const jme::Money& obj) {
...
}
If the operator was defined within the jme namespace, then you have to
also do the friend declaration specifying:
friend std::ostream& jme::operator<<(std::ostream&,const jme::Money&);
and somewhere else specify the implementation within the jme namespace:
:
namespace jme {
std::ostream& operator<<(std::ostream& os,const Money&) {
...
}
}
/Per W
On Thu, 30 Jun 2005 jalkadir gosonic ca wrote:
> Yes, I just notice that, so this are the changes I have made:
>
> --- Money.hpp
> friend std::ostream& std::operator<<( std::ostream&, const jme::Money& );
> friend std::istream& std::operator>>( std::istream&, jme::Money& );
>
>
> --- Money.cpp
> std::operator<<( std::ostream& os, const jme::Money& obj ) {
> os << obj.getAmount();
> return os;
> }
> std::istream&
> std::operator>>( std::istream& is, jme::Money& obj ) {
> is >> obj.amount;
> return is;
> }
> --------------
> But this is giving me linker errors sayng:
>
>
> ========= ERROR ===========
> In file included from money.cpp:2:
> money.hpp:67: error: `std::ostream& std::operator<<(std::ostream&, const
> jme::Money&)' should have been declared inside `std'
> money.hpp:68: error: `std::istream& std::operator>>(std::istream&,
> jme::Money&)' should have been declared inside `std'
>
>
> What am I doing wrong!!?
>
> Again thanks for you help.
>
>
>
>
> > What namespaces are you using.
> >
> > You have declared the friend operator as:
> > std::ostream& operator<<(...)
> > and implemented it as:
> > std::ostream& jme::operator<<(...)
> >
> > Without a maching output operator, the compiler will emit the pointer to
> > the object instead.
> >
> > /Per W
> >
> > On Thu, 30 Jun 2005 jalkadir gosonic ca wrote:
> >
> >> In my class, when I use the "getter" to display the value I get the
> >> right
> >> output, but when I try using the overloaded extractor operator (<<) I
> >> get
> >> some hex value displayed. Here is some of the code:
> >> --- snip
> >> Main.cpp
> >> int main() {
> >> Money money("12.21");
> >>
> >> std::cout << "Value is: " << money.getAmount() << std::endl; // 12.21
> >> std::cout << "Value is: " << money << std::endl; // hex value????
> >> return 0;
> >> }
> >>
> >>
> >>
> >> The class goes like this:
> >> ---snip
> >> Money.hpp
> >> class Money {
> >> protected:
> >> float amount; //!< This variable holds the numerical value
> >> public:
> >> //! Constor
> >> Money(const std::string&);
> >>
> >> //!Copy constructor
> >> Money( const Money& );
> >>
> >> //!Destructor
> >> ~Money() { std::cout << amount << std::endl;} //<<=== 12.21
> >>
> >> // Setters
> >> ...
> >> // Getters
> >> const float getAmount() const;
> >>
> >> // Overloaded operators
> >> .....
> >> friend std::ostream& operator<<( std::ostream&, const jme::Money& );
> >> friend std::istream& operator>>( std::istream&, jme::Money& );
> >> ....
> >> } ; //Money
> >>
> >>
> >>
> >> and the code looks like this
> >> --- snip
> >> jme::Money::Money( const std::string& x){
> >> this->setAmount(x); // this metho converts the std::string to a
> >> float
> >> }
> >> const float jme::Money::getAmount() const {
> >> return this->amount;
> >> }
> >> std::ostream&
> >> jme::operator<<( std::ostream& os, const jme::Money& obj ) {
> >> os << obj.getAmount(); //<<==== 0x4b1120
> >> return os;
> >> }
> >> ----- end of snip
> >> As you can see when using the member method getAmount() the value
> >> displayed is in the right format, however the extractor operator is not
> >> doing
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]