未解析的外部符号“私有:静态类变量”c ++ [重复]

问题描述 投票:0回答:1

我在使用静态方法和锁在 C++ 中创建容器时遇到错误。我不是 C++ 专家。有人能帮忙找到真正的问题吗?下面是代码。我正在使用 v14 - Visual Studio 2015 (v140)

#pragma once
#include <iostream>
#include <map>
#include <string>
#include <mutex>
#include <shared_mutex>

class obj {};

class pricercache
{
    static  std::shared_mutex entry_mutex;
private:
    static std::map<std::string,obj>& getInstance()
    {
        static std::map<std::string, obj>    engines;
        return engines;
    }
public:

    pricercache(pricercache const&) = delete;
    void operator=(pricercache const&) = delete;

    static obj get(std::string const& key)
    {
        std::shared_lock<std::shared_mutex> lk(pricercache::entry_mutex);
        std::map<std::string, obj>::const_iterator const it =
            getInstance().find(key);        
        return it->second;
    }
    static void add(std::string const& key,
        obj engine)
    {
        std::lock_guard<std::shared_mutex> lk(pricercache::entry_mutex);
        auto& engines = getInstance();
        if (engines.find(key) == engines.end())
            engines.insert(std::make_pair(key, engine));
    }
};

int main()
{
    std::cout << "Hello World!\n";
    obj v1; 
    obj v2;
    pricercache::add("1", v1); 
    pricercache::add("2", v2);

    auto A = pricercache::get("1");
    auto b = pricercache::get("2");

    std::cout << "Done!\n";

    
}

我得到的错误是:

error LNK2001: 未解析的外部符号“private: static class std::shared_mutex pricercache::entry_mutex” (?entry_mutex@pricercache@@0Vshared_mutex@std@@A)

如果您对容器类有任何其他建议,我也将非常欢迎和感激。 提前致谢。

c++ c++14 mutex static-methods unresolved-external
1个回答
0
投票

编译器会报错,因为你声明了静态成员,但没有定义。在你的代码中的某个地方,你应该这样定义它

std::shared_mutex pricercache::entry_mutex; // definition of the entry_mutex 
© www.soinside.com 2019 - 2024. All rights reserved.