Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
I get a compiler error, and can't seem to wrap my head around the actual problem Say I have the following code (reduced to a dummy minimum for purpose of demonstration):
#include "c4d.h" class Int32Pair { public: Int32Pair() : a(0), b(0) {} Int32Pair(const Int32& _a, const Int32& _b) : a(_a), b(_b) {} virtual ~Int32Pair() {} private: Int32 a; Int32 b; }; class Test { public: Test() { maxon::BaseArray<Int32Pair> somedata; if (somedata == mPairArray) { // do something } } ~Test() {} private: maxon::BaseArray<Int32Pair> mPairArray; };
Basically, I have two arrays of Int32Pair which I want to compare, but compiler gives me a
error C2338: IsEqual not defined.
Which I have narrowed done as being caused by the line
if (somedata == mPairArray)
Where should this IsEqualbe defined?
IsEqual
Inspired by the SortedArray example I tried adding an IsEqual into the Int32Pair class as:
SortedArray
static maxon::Bool IsEqual(const Int32Pair& p1, const Int32Pair& p2) { return (p1.a == p2.a) && (p1.b == p2.b); }
But compiler still complains about IsEqual not being defined. As such, I am guessing it's the BaseArray which needs to be defined with a compare method. But how? Have tried looking into the BaseArray manual, but failed to find any answer.
BaseArray
I would appreciate an example showing how it needs to be done. Thanks in advance.
Hello,
you have to define the operator == in your class Int32pair. For this you have a macro that help, it will implement both == and != operator.
class Int32Pair { public: Int32Pair() : a(0), b(0) {} Int32Pair(const Int32& _a, const Int32& _b) : a(_a), b(_b) {} virtual ~Int32Pair() {} MAXON_OPERATOR_EQUALITY(Int32Pair, a, b); private: Int32 a; Int32 b; };
Let me know if it solve the problem
Cheers Manuel
@m_magalhaes said in IsEqual not defined:
MAXON_OPERATOR_EQUALITY(Int32Pair, a, b);
Thanks, didn't know about the MAXON_OPERATOR_EQUALITY. Very handy indeed.
However, I had already tried providing an equality operator in my Int32Pair class, as such:
Bool operator == (const Int32Pair& other) { return (a == other.a) && (b == other.b); }
But that still resulted in the "IsEqual not defined" compiler error. The macro, however, is working fine.
Looking further at my implementation of operator==, I now notice I didn't declare it as a const method. Adding the const does get rid of the compiler error. Oh boy! Overlooked a minor "typo", with major consequences.
Again, thanks for the macro.