You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中unordered_set能否用自定义类指针作键?LNK2001错误排查

解决UE4中C++静态成员变量的LNK2001未解析外部符号错误

错误原因

你在头文件中仅声明了Point类的静态成员变量CachedPoint和CachedNum,但未在.cpp文件中为它们分配实际内存空间。C++规定,静态成员变量必须在类的外部进行定义,否则链接器无法找到对应的符号实体,从而抛出LNK2001错误。

解决步骤

  1. 创建或打开Point.cpp文件(若尚未存在)
  2. 在文件中添加静态成员变量的定义,以及类成员函数的实现:
#include "Point.h"

namespace Grid
{
    // 为静态成员变量分配内存
    size_t Point::CachedNum = 0;
    std::unordered_set<Point*, Point::PointHash, Point::PointEqual> Point::CachedPoint;

    // 构造函数实现
    Point::Point(float X, float Y, float Z) : X(X), Y(Y), Z(Z) {}

    // CreatePoint 缓存逻辑实现
    Point* Point::CreatePoint(float X, float Y, float Z)
    {
        // 临时对象用于查找缓存
        Point temp(X, Y, Z);
        auto iter = CachedPoint.find(&temp);
        if (iter != CachedPoint.end())
        {
            return *iter;
        }

        // 缓存不存在则创建新实例并存入缓存
        Point* newPoint = new Point(X, Y, Z);
        CachedPoint.insert(newPoint);
        CachedNum++;
        return newPoint;
    }

    // ClearCache 清理缓存实现
    void Point::ClearCache()
    {
        for (Point* point : CachedPoint)
        {
            delete point;
        }
        CachedPoint.clear();
        CachedNum = 0;
    }
}

补充说明

  • 静态成员变量的定义格式为:类型 类名::成员名 = 初始值;,容器类可依赖默认构造,内置类型建议显式初始化
  • 必须确保所有类成员函数(构造函数、CreatePoint、ClearCache)都在.cpp文件中有实现,否则会触发其他未解析符号错误

内容的提问来源于stack exchange,提问作者Krieg0726

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 23:25:23