Whoops, sorry I missed this - let's see what I can do for ya.
Unfortunately I'm not sure I can answer your question about the link error - however, If I remember correctly, the 8 direction movement is working off a much older version of the SDK, and I believe some dependencies changed along the way, so that's probably the likely culprit.
As for question two, I actually needed something similar for my gravitation behavior. What I'd suggest is adding a static CRunObject* to your class declaration in Main.h after the ACE function declarations. In Runtime.cpp you'll have to define it - I have it after the #ifdef RUN_ONLY line.
Main.h:
////////////////////////////////////////////////////
// Data members
// Use when private variables (OF_PRIVATEVARIABLES) are enabled.
//vector<ExpStore> privateVars;
// Initialize the vector of object pointers for accessing data across objects
static CRunObject* playerObject;
//////////////////////////////////////////////////////////////////////////////////
// Runtime functions
//////////////////////////////////////////////////////////////////////////////////
#ifdef RUN_ONLY
CRunObject* ExtObject::playerObject;
After that, you can create an action where you provide an object as a parameter and slip it your player instance. All instances of your enemy behavior will have access to the pointer since it's static.
On another note, In Construct have you heard of including event sheets? If you right click in the event sheet editor, there's an option to include another event sheet - just place all of the code you want to reuse in one sheet and include it wherever you need it. It's one of my favorite Construct features.
I hope all this helps. Good luck!