Compiler Linker Error Declaring FLinearColor Static Const

Dear Friends at Epic,

I’m using a bunch of predefined colors in my HUD and since these calcs run every tick I am wanting to make the colors static const.

The setup I used for FNames worked great, but for the FLinearColors I am getting a linker error

#.h

public:
         static const FLinearColor RVColor_Pink;
	static const FLinearColor RVColor_Red;
	static const FLinearColor RVColor_Orange;
	static const FLinearColor RVColor_Yellow;
	static const FLinearColor RVColor_Reddish;
	
//FNames
public:
	static const FName MorphA;
	static const FName MorphB;
	static const FName MorphF;
	static const FName MorphQ;

#.cpp

AVictoryHUD::AVictoryHUD(const class FPostConstructInitializeProperties& PCIP) : Super(PCIP)
{
        //wont compile
   const FLinearColor RVColor_Red				= FLinearColor(1,0,0,0.8);
const FLinearColor RVColor_Yellow 				= FLinearColor(1,1,0,1);
const FLinearColor RVColor_Pink 				= FLinearColor(1, 0, 1, 1);
const FLinearColor RVColor_Reddish 			= FLinearColor(1,0,0.111,1);
const FLinearColor RVColor_Orange 			= FLinearColor(1,0.3,0,1);

//FNames   // <---- this part works great!
const FName MorphA = FName("A");
const FName MorphB = FName("B");
const FName MorphF = FName("F");
const FName MorphQ = FName("Q");
}

#compile error

1>------ Build started: Project: VictoryGame, Configuration: Development_Editor x64 ------
1>  Parsing headers for VictoryGameEditor
1>  Code generation finished for VictoryGameEditor and took 1.729
1>  Module.VictoryGame.1_of_2.cpp
1>  Module.VictoryGame.2_of_2.cpp
1>  link.exe RocketEditor-VictoryGame.dll
1>     Creating library E:\RocketVictory\VictoryGame\Intermediate/BuildData/VictoryGame\Win64\Development\RocketEditor-VictoryGame.lib and object E:\RocketVictory\VictoryGame\Intermediate/BuildData/VictoryGame\Win64\Development\RocketEditor-VictoryGame.exp
1>Module.VictoryGame.2_of_2.cpp.obj : error LNK2001: unresolved external symbol "public: static struct FLinearColor const AVictoryHUD::RVColor_Pink" (?RVColor_Pink@AVictoryHUD@@2UFLinearColor@@B)
1>Module.VictoryGame.2_of_2.cpp.obj : error LNK2001: unresolved external symbol "public: static struct FLinearColor const AVictoryHUD::RVColor_Red" (?RVColor_Red@AVictoryHUD@@2UFLinearColor@@B)
1>Module.VictoryGame.2_of_2.cpp.obj : error LNK2001: unresolved external symbol "public: static struct FLinearColor const AVictoryHUD::RVColor_Orange" (?RVColor_Orange@AVictoryHUD@@2UFLinearColor@@B)
1>Module.VictoryGame.2_of_2.cpp.obj : error LNK2001: unresolved external symbol "public: static struct FLinearColor const AVictoryHUD::RVColor_Yellow" (?RVColor_Yellow@AVictoryHUD@@2UFLinearColor@@B)
1>E:\RocketVictory\VictoryGame\Binaries\Win64\RocketEditor-VictoryGame.dll : fatal error LNK1120: 4 unresolved externals

#Thanks!

Thanks in advance!

Rama

#Solution

I moved the .cpp definitions out of the constructor and now both linear color and FName work

what I find very confusing is that the FNames worked in the above example despite being in the constructor

so I am leaving this un-green so that can be looked at if you all are interested :slight_smile:

const FLinearColor AVictoryHUD::RVColor_Red		= FLinearColor(1,0,0,0.8);
const FLinearColor AVictoryHUD::RVColor_Yellow 		= FLinearColor(1,1,0,1);
const FLinearColor AVictoryHUD::RVColor_Pink 		= FLinearColor(1, 0, 1, 1);
const FLinearColor AVictoryHUD::RVColor_Reddish 	= FLinearColor(1,0,0.111,1);
const FLinearColor AVictoryHUD::RVColor_Orange 	= FLinearColor(1, 0.3, 0, 1);
	
//FNames
const FName AVictoryHUD::MorphA = FName("A");
const FName AVictoryHUD::MorphB = FName("B");
const FName AVictoryHUD::MorphF = FName("F");
const FName AVictoryHUD::MorphQ = FName("Q");

AVictoryHUD::AVictoryHUD(const class FPostConstructInitializeProperties& PCIP) : Super(PCIP)
{

The FNames didn’t necessarily work in the above example, the linker may have just quit after finding earlier errors, not checking the rest. Or you hadn’t yet used those FName variables anywhere, so the linker didn’t care that they weren’t defined.

Thanks for the info Joe!

:slight_smile:

Rama