在一个类的静态成员函数中使用静态成员变量,并且遇到“无法解析的外部符号”错误,这通常是因为没有在类的实现文件(通常是.cpp文件)中定义该静态成员变量。
在头文件中,定义了一个类似下面的类:
class MyClass {
public:
static void MyStaticFunction();
private:
static TArray<uint8> UncompressedBGRA;
};
在cpp中:
#include "MyClass.h"
TArray<uint8> MyClass::UncompressedBGRA;
void MyClass::MyStaticFunction() {
// 现在你可以在这里使用 UncompressedBGRA 变量
UncompressedBGRA.Add(0);
}
在C++中,静态成员变量的声明和定义是分开的,这是C++语言规范的一部分。
为什么需要在.cpp文件中定义
内存分配:静态成员变量在所有类的实例之间共享。定义该变量确保它在程序运行时有一个唯一的内存地址。
链接期要求:静态成员变量的定义必须放在实现文件中,以便链接器能够找到并链接该变量。否则,在使用这个静态成员变量时,链接器会找不到它的定义,导致“无法解析的外部符号”错误。