如何摆脱 C++ 中未解析的外部符号 "private: static char" 错误?

How do I get rid of Unresolved external symbol "private: static char" error in C++?

我觉得我在这里遗漏了一些非常愚蠢的东西,但仍然:我正在编写的游戏引擎中有这个恼人的 "external symbol" 错误:

基本上我想创建一个 class 来读取一些全局变量中的路径(这样我就不必将它们发送到各处)。我使用 github 的 NFD(nativefiledialog) 打开文件。我在此之前直接在 main.cpp 中对其进行了测试,但仅在将其放入 class.

中后才会出现问题

https://github.com/mlabbe/nativefiledialog

Paths.h

#pragma once
#include <iostream>
#include <nfd.h>

namespace RW {
    class Paths {
    private:
        static nfdchar_t *gamePath;
        static nfdresult_t result;
    public:
        static void chooseGamePath();
    };
}

Paths.cpp

#include "Paths.h"

namespace RW {
    nfdchar_t Paths::*gamePath = NULL;
    nfdresult_t Paths::result;

    void Paths::chooseGamePath()
    {
        result = NFD_OpenDialog(NULL, NULL, &gamePath);;
        std::cout << "Please choose the location of the warcraft's exe file!" << std::endl;

        if (result == NFD_OKAY) {
            std::cout << "Success!" << std::endl;
            std::cout << gamePath << std::endl;
            free(gamePath);
        }
        else if (result == NFD_CANCEL) {
            std::cout << "User pressed cancel." << std::endl;
        }
        else {
            std::cout << "Error: " << NFD_GetError() << std::endl;
        }
    }
}

错误:

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2001 unresolved external symbol "private: static char * RW::Paths::gamePath" (?gamePath@Paths@RW@@0PADA) Half-an Engine  D:\Programozás\Repositories\Warcraft-II-HD\Half-an Engine\Paths.obj 1   

在cpp文件中,这一行:

nfdchar_t Paths::*gamePath = NULL;

声明一个名为 gamePath指向成员 的指针,它只能指向 Paths class 的成员输入 nfdchar_t.

但这不是您在 Paths class 中声明的 gamePath 成员。您将其声明为只是一个简单的(静态)nfdchar_t* 指针。

将该行改为:

nfdchar_t* Paths::gamePath = NULL;

声明了一个名为 gamePath 的变量,它是 Paths class 的成员,类型为 nfdchar_t*。这与您在 Paths class 声明中对 gamePath 的声明相匹配。