This question already has answers here:
static variable link error

(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 = {};
};

10-06 05:28
查看更多