编译报错:nonstandard extension used: ‘argument’: conversion from ‘T’ to ‘TSharedRef<FString,ESPMode::ThreadSafe> &’
这是我写的结构体构造函数和使用该结构体语句报错的地方:
FLoginfo(TSharedRef<FString>& NewMessage, ELogVerbosity::Type NewVerbosity, FName NewCategory, FName NewStyle = NAME_None)
: Message(NewMessage), Verbosity(NewVerbosity), Category(NewCategory), Style(NewStyle) {}
Messages.Add(MakeShared<FLoginfo>(MakeShared<FString>(V), Verbosity, Category, Style)); //Messages是一个数组:TArray<TSharedPtr<FLoginfo>> Messages。
仔细看报错最后一条,MakeShared被实例化为:
'TSharedRef<FLoginfo,ESPMode::ThreadSafe> MakeShared<FLoginfo,ESPMode::ThreadSafe,TSharedRef<FString,ESPMode::ThreadSafe>,ELogVerbosity::Type&,const FName&,FName&>(TSharedRef<FString,ESPMode::ThreadSafe> &&,ELogVerbosity::Type &,const FName &,FName &)' being compiled
第一个参数是右值,而构造函数中的NewMessage是左值,显然不能把右值赋给左值引用。 所以在FLoginfo构造函数的第一个形参前加上const就好了。