如何摆脱 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
的声明相匹配。
我觉得我在这里遗漏了一些非常愚蠢的东西,但仍然:我正在编写的游戏引擎中有这个恼人的 "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
的声明相匹配。