Not entirely sure about this - but I think you can just use ptExecute.
The class doesn't know itself at the moment you define it, so referring to it makes the compiler go "paralelel-what-now?".
Something else seems weird to me (but again, no expert, just trying to help):
staticvoid (*ptExecute)(unsigned index);
Why do you have braces around *ptExecute?
If you want a void pointer as a return type shouldn't it be: staticvoid* ptExecute(...);
Also:
1 2 3 4 5 6 7 8
class ParallelVector{
protected:
staticvoid (*ptExecute)(unsigned index); // pointer
staticvoid fsum(unsigned index); // impl
public:
void sum(ParallelVector&x, ParallelVector &y); // interface
} ; //You need a semicolon after the class definition
Anyway - just my 2 cents, hopefully one of the experts around here can give you a more definite answer.
And it compiled.
Notice I put a semicolon after your ParallelVector class closing brace though.
Perhaps it's telling you its not defined because the class is not recognised properly as it is missing the semicolon at the end?
class ParallelVector
{
protected:
//This is a standard C++ (non-member) function pointer
//it is also static member
staticvoid (*ptExecute)(unsigned index);
};
// correct definition of the static member function pointer above.
void (*ParallelVector::ptExecute) (unsigned index) =0;
//THIS IS INCORRECT - you are actually creating a new GLOBAL variable
//which is apointer to a Parallelvector class member function that
//takes an unsigned parameter with void return
void (ParallelVector::*ptExecute) (unsigned index) =0;