c++ - 尝试引用已删除的函数,VS 2015

标签 c++ visual-studio-2015

以下用于使用 Visual Studio 2013 进行编译,但现在在 Visual Studio 2015 中出现错误“试图引用已删除的函数”。

template<typename... Args>
void operator()(Args && ... args)
{
    auto guard = std::lock_guard<std::mutex>(Mutex);
    {
        Clean();

        for (auto const & listener : Listeners)
        {
            if(auto locked = std::get<0>(listener).lock())              
                std::get<1>(listener)(args...);
        }
    }
}

错误是第一条语句:

auto guard = std::lock_guard<std::mutex>(Mutex)

Mutex 只是一个 std::mutex。任何人都可以阐明为什么现在这是一个错误吗?

编辑:我也在这里用这行代码得到它:

auto converter = std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>>();

最佳答案

如果你看到例如this std::lock_guard constructor reference您会看到在您的声明中调用的复制构造函数被标记为已删除。

解决它的最简单方法是使用复制构造函数形式的初始化,而是直接初始化:

std::lock_guard<std::mutex> guard(Mutex);

关于c++ - 尝试引用已删除的函数,VS 2015,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31639070/

相关文章:

c++ - cpp 中的引用如何具有相同的内存地址?

c++ - 错误-ld返回1退出状态 undefined reference

c++ - visual c++ 跨平台android : Include prebuilt shared library

visual-c++ - 使用在不同时间/团队编译的同一 VS 中的 C++ DLL - ABI 兼容性?

crash - 添加具有导航属性的实体对象作为数据源,导致 Visual Studio 2015 崩溃

c++ - 测试 aligned_storage 的大小

c++ - 如何随机化排序列表?

c++ - 为什么这个程序不打印出十六进制值?

c++ - CMake:在 Windows 上找不到编译器

c# - 没有注册类型 'Microsoft.Framework.DependencyInjection.ServiceLookup.IServiceManifest' 的服务