1

我目前正在检查电子邮件地址的顶级域。为了检查,我将它与一个文本文件列表进行比较。我想将列表导入静态地图容器。但是,当我尝试实例化它时,它说它不能在当前范围内定义。这是为什么?

这是我的一些头文件:

    class TldPart {
    public:
        static void LoadTlds();
    private:
        static map<string,bool> Tld;
    }

这是cpp中的实现:

    void TldPart::LoadTlds()
    {
        map<string,bool> Tld;
        ...
    }

它告诉我 ValidTld 不能在 LoadTlds 函数中定义。

4

1 回答 1

1

类的静态成员存在于对象之外。您应该在类之外定义和初始化静态成员。

这里我们定义并初始化一个静态类成员:

头文件:

#pragma once

#include <map>
#include <string>

class TldPart {
public:
    static void LoadTlds();
private:
    static std::map<std::string, bool> tld;
};

你的 cpp 文件:

#include "external.h"

std::map<std::string,bool> TldPart::tld;

void TldPart::LoadTlds()
{
    tld.insert(std::make_pair("XX", true));
}

并且不要忘记课堂结束时的分号。

编辑:您可以为 const 整数类型的静态成员或 constexprs 且具有文字类型的静态成员提供类内初始化程序。

于 2013-03-07T04:10:10.010 回答