There 3 most common reasons why can have Unresolved External Symbols linker error:
1.You declared non-virtual function (standard function) but you didn’t define code for it
2.The function is in different module and you didn’t add dependency of that module in build script (*.build.cs file)
3.Class you trying to use is declared as MinimalAPI or missing extern (MODULENAME_API macro) and can not be used outside of it’s module (in this case you would need to modify engine and rebuild it, possible for game projects no go for plugins)
Number 2 and 3 are UE4 specific, related to UE4 build system and it’s configuration.
Your case is probably number 2, you probably missing module decency and you need to add module you using in to build script of your module. Start by checking from which module, functions or classes you using belong to, you can easily do this by searching API reference (just google class or function name and add “UE4 API”, it most effective way of searching thru API reference now days). But in this case i did that for you:
Now look below of the page you should have information in which module class is declered and in which header file, so in ourr case it is “NavigationSystem”
go to *.Build.cs file in you module inside oyur project and you will find something like this:
PublicDependencyModuleNames.AddRange(new string[]{ "Core", "CoreUObject", "Engine"});
Build scripts are written in C# and this line adds decencies to the your module build rules, “Core” module contains most basic functions that you use in C++ inside UE4, “CoreUObject” contains module UObject system, root of class tree in UE4 and “Engine” is core of engine it self. Engine is divided in to more modules (“Engine” module only contains core things), you can see them as dlls in binary folder in the engine and you need to add decency if you referenceing anything from that specific module, this way UnrealBuidTool knows what to build during packaging and properly configures compilation environment for your module, so build is fully optimized.
So all you need to do is just add “NavigationSystem” to that list like this:
PublicDependencyModuleNames.AddRange(new string[]{ "Core", "CoreUObject", "Engine", "NavigationSystem"});
And in future oyu just add up more to this, depending what you are using, if you remove usage of some module in your module you remove it’s entry here too.