我正在尝试用c++制作一个基于文本的控制台视频游戏。
我有一个Inventory类,它有一个头和一个源文件。在同一个头文件中,我声明了一个名为STRINGSIZES
的结构,它有两个名为name和description的整数成员。它们用于存储显示项目时应使用的长度,或者名称将从哪个长度缩短。头文件"Inventory.h"看起来像这样:
#pragma once
#include <iostream>
struct STRINGSIZES { //the fixed Size with which Inventory lists will be printed
int name;
int description;
};
class Inventory
{
public:
//some unrelated code
Inventory();
static void setStringSizes(int name, int description);
private:
static STRINGSIZES stringSizes;
};
在Inventory.cpp文件中,我定义了setStringSizes()
方法,如下所示:
void Inventory::setStringSizes(int name, int description)
{
stringSizes.name = name;
stringSizes.description = description;
}
在我的Source.cpp主文件中,我首先调用这个方法。
现在,当我试图编译这个时,我得到了错误:
1> Inventory.obj:错误LNK2001:未解析的外部符号"public:static int stringSizeNames::name"(?name@stringSizeNames@@2HA(
1> Inventory.obj:错误LNK2001:未解析的外部符号"public:static int stringSizeNames::description"(?description@stringSizeNames@@2HA(
这里有什么问题?
错误消息引用了一个变量,该变量的声明没有在问题中显示。但我认为这与静态数据成员stringSizes
的问题相同。
在类定义中,此数据成员
static STRINGSIZES stringSizes;
是不是定义的声明。
您必须在cpp文件中的类定义之外定义它,例如
STRINGSIZES Inventory::stringSizes;
如果您的编译器支持C++17标准,那么您可以在类定义中以以下方式定义数据成员
class Inventory
{
//...
inline static STRINGSIZES stringSizes = {};
};