提问人:Lorand 提问时间:9/11/2018 更新时间:9/12/2018 访问量:1353
如何摆脱 C++ 中未解析的外部符号“私有:静态字符”错误?
How do I get rid of Unresolved external symbol "private: static char" error in C++?
问:
我有一种感觉,我在这里错过了一些非常愚蠢的东西,但仍然: 我在正在编写的游戏引擎中出现了这个烦人的“外部符号”错误:
基本上,我想创建一个类来读取某些全局变量中的路径(因此我不必将它们发送到任何地方)。我使用github上的NFD(nativefiledialog)打开文件。在此之前,我直接在 main.cpp 中对其进行了测试,但问题仅在将其放入类中后才发生。
https://github.com/mlabbe/nativefiledialog
路径.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();
};
}
路径.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
答:
2赞
Remy Lebeau
9/11/2018
#1
在 cpp 文件中,以下行:
nfdchar_t Paths::*gamePath = NULL;
声明一个指向成员的指针,该指针只能指向类型为 的类的成员。gamePath
Paths
nfdchar_t
但这不是你在班级中声明的成员。您将其声明为一个简单的(静态)指针。gamePath
Paths
nfdchar_t*
将该行改为:
nfdchar_t* Paths::gamePath = NULL;
它声明了一个名为该变量的变量,该变量是该类的成员,其类型为 。这与您在类声明中的声明相匹配。gamePath
Paths
nfdchar_t*
gamePath
Paths
评论
0赞
Lorand
9/11/2018
谢谢。我有一种感觉,修复会像这样愚蠢:))。无论如何,我想知道......这两个声明有什么不一样?
0赞
SergeyA
9/11/2018
@SzokeLori第二个版本定义了你要查找的内容,即类的成员变量,其类型为 。第二个定义指向类型为 的类的任何成员变量的指针。换句话说,第二个是成员指针,而第一个是指向成员的指针。Path
nfdchar_t*
Path
nfdchar_t
1赞
Lightness Races in Orbit
9/12/2018
这就是右对齐星号的问题。右对齐狂热者列出了几个左对齐与语法相冲突的晦涩情况,但像这个问题这样的例子做同样的事情,而且更常见/明显。左对齐!
下一个:运行时扫描变量时出错
评论