This question already has answers here:
static variable link error
(3个答案)
7个月前关闭。
我正在尝试用C++制作基于文本的控制台视频游戏。
我有一个带有标题和源文件的Inventory类。在同一个头文件中,我声明了一个名为
在Inventory.cpp文件中,我定义
在我的主要Source.cpp文件中,我首先调用此方法。
现在,当我尝试编译它时,我得到了错误:
1> Inventory.obj:错误LNK2001:未解析的外部符号“public:静态int stringSizeNames::name”(?name @ stringSizeNames @@ 2HA)
1> Inventory.obj:错误LNK2001:未解析的外部符号“public:静态int stringSizeNames::description”(?description @ stringSizeNames @@ 2HA)
这里有什么问题?
是不是定义的声明。
您必须在cpp文件的类定义之外定义它,例如
如果您的编译器支持C++ 17标准,则可以通过以下方式在类定义中定义数据成员
(3个答案)
7个月前关闭。
我正在尝试用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:静态int stringSizeNames::name”(?name @ stringSizeNames @@ 2HA)
1> Inventory.obj:错误LNK2001:未解析的外部符号“public:静态int stringSizeNames::description”(?description @ stringSizeNames @@ 2HA)
这里有什么问题?
最佳答案
错误消息引用了一个变量,该变量未在问题中显示。但是我认为这与静态数据成员stringSizes
一样是一个问题。
在类定义中,此数据成员
static STRINGSIZES stringSizes;
是不是定义的声明。
您必须在cpp文件的类定义之外定义它,例如
STRINGSIZES Inventory::stringSizes;
如果您的编译器支持C++ 17标准,则可以通过以下方式在类定义中定义数据成员
class Inventory
{
//...
inline static STRINGSIZES stringSizes = {};
};