非常令人不安的错误消息

时间:2014-10-12 13:42:56

标签: c++

来自第三方代码库,我收到错误:

错误140错误:指向绑定函数的指针只能用于调用函数

导致该错误的函数:

/** Static name of function to call */
    static FName GetAddComponentFunctionName()
    {
        static const FName AddComponentFunctionName(GET_FUNCTION_NAME_CHECKED(AActor, AddComponent));
        return AddComponentFunctionName;
    }


// Returns FName(TEXT("FunctionName")), while statically verifying that the function exists in ClassName
// &((ClassName*)0)->FunctionName will generate 'error: cannot create a non-constant pointer to member function' on the Mac
#if PLATFORM_WINDOWS
    #define GET_FUNCTION_NAME_CHECKED(ClassName, FunctionName) \
        ((void)sizeof(&((ClassName*)0)->FunctionName), FName(TEXT(#FunctionName)))
#else
    #define GET_FUNCTION_NAME_CHECKED(ClassName, FunctionName) \
        FName(TEXT(#FunctionName))
#endif

同样,这段代码用VS编译,但不用intel的icl

编译

1 个答案:

答案 0 :(得分:3)

正如错误所述,

MyObject->MyFunc不能用于除立即函数调用之外的任何事情。即使某些编译器允许,您甚至无法使用sizeof。我想你的意思是sizeof(&ClassName::FunctionName)。这样更简单,实际上会编译,并且不会调用未定义的行为(取消引用空指针就是UB,即使你不对取消引用的结果做任何事情)。