BaseSort member variable?

On 14/07/2016 at 12:06, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   17 
Platform:   Windows  ;   Mac OSX  ; 
Language(s) :     C++  ;

---------
Hi,

I'm looking for a way to implement a variable sorting crtiteria in my BaseSort class, but I'm not getting it to work. I just want to sort an array with vectors using a tolerance value (eps) :

  
class SortVector : public maxon::BaseSort <SortVector>   
{   
public:   
     static Bool LessThan(Vector a, Vector b)   
     {   
          if (a.z < b.z - eps) return true;   
          if (a.z > b.z + eps) return false;   
          return (a.x < b.x);   
     }   
     SortVector(Float d)   
     {   
          eps = d;   
     }   
public:   
     static Float eps;   
};   
  
//---------------------------------   
  
maxon::BaseArray<Vector> points;   
//... filling the array ...   
SortVector sort(10);   
sort.Sort(points);                  

I want to start the sorting using the tolerance value, but the compiler gives me an unsolved symbol "eps" error because of the static declaration. But I can't omit static, because LessThan wouldn't know "eps". And finally I can't omit static for LessThan().

It happens frequently, that I need additional variable parameters for sorting. How is the provided way to do this?

Thanks of any help.

On 14/07/2016 at 17:08, xxxxxxxx wrote:

Did you forget to add the definition of SortVector::eps also in your actual code? Something like this in a
translation unit (.cpp file).

Float SortVector::eps = 1.0e-7;  // just an example value

On 15/07/2016 at 01:45, xxxxxxxx wrote:

You only have the declaration of the static member but you also need to give it a definition (i.e. what Niklas provided) to actually make it exist.

On 15/07/2016 at 03:21, xxxxxxxx wrote:

Thanks. Have to read a chapter about static stuff I guess.