Re: Question about namespace
Lets translate the error message it spit out.
The error when I try to do this with a an image made up of "mycomplex"
pixels is:
utils.cpp: In member function std::vector<T, std::allocator<_CharT> >
image<T>::power() [with T = mycomplex]:
self_report.cpp:82: instantiated from void image<T>::report(int) [with T
= mycomplex]
main_deconvolve2.C:85: instantiated from here
utils.cpp:994: error: no match for operator>= in tmpval >= 0
mycomplex.h:86: note: candidates are: bool
mycomplex::operator>=(mycomplex&)
make: *** [deconvolve] Error 1
For humans:
1. The problem is somewhere in image<mycomplex>::power(),
2. which for your information got called from image<mycomplex>::report(int),
3. being invoked in main_deconvolve2.C, line 85, just to be precise...
4. Mr. compiler failed to find a greater-or-equal for tmpval>=0.
5. It could well be possible you'd like to compare some mycomplex objects
for greater-or-equality, but Mr. compiler does what's written and not what's
meant.
Analysis:
1. tmpval is a mycomplex.
2. mycomplex must be implicitly constuctible from the 0 literal.
3. it could use the first ctor: mycomplex(double).
I assume you declared greater-or-equal like this, just as the error message
says:
class mycomplex
{
bool operator>=(mycomplex& that);
};
You are not const-correct. Try this instead and the temporary mycomplex(0)
can bind to the now-const reference:
class mycomplex
{
bool operator>=(const mycomplex& that) const;
};
Notice also, the member function approach above is somewhat incorrect as the
implicit this and that arguments in (this >= that) are subject to differing
conversion rules. Better is:
class mycomplex
{
friend bool operator>=(const mycomplex& left, const mycomplex& right);
}
That way conversions on the two instances (left >= right) are symmetric. By
the way, same applies to all comparison operators. Thats why most textbooks
declare operator==() as free function and not as member function as I
expected when I learned C++... but they never tell one.
Regards,
Thomas.