为什么我不能使用chrono库?

问题描述

你好,我正在做一些简单的线程运动,我希望我的t1睡眠2秒,但是我遇到了这个错误:无法找到数字文字运算符“ operator”” s

那怎么可能?

public class ResetManagerAutofacModule : Module
{
    protected override void AttachToComponentRegistration(
        IComponentRegistryBuilder componentRegistryBuilder,IComponentRegistration registration)
    {
        registration.Activated += (sender,e) =>
            RegisterToResetManager(e.Instance,e.Context);
    }

    protected override void Load(ContainerBuilder builder)
    {
        builder.RegisterType<ResetManager>().As<IResetManager>().SingleInstance();
        // Because there are no module events for the end-of-lifetime of objects,// we use a disposable class as a helper to get informed about disposal
        // (declaration see below):
        builder
            .RegisterType<DisposeObserver>()
            .InstancePerDependency(); // important!!!
    }

    private void RegisterToResetManager(object instance,IComponentContext context)
    {
        var resettable = instance as IAutoRegisteredResettable;
        if (resettable == null)
            return;
        var resetManager = context.Resolve<IResetManager>();
        // Hook the object on the manager:
        resetManager.RegisterInstance(resettable);
        // Get a new instance of our dispose helper class from the container
        // which has the same lifetime as "instance" because DisposeObserver
        // is registered as InstancePerDependency.
        var disposableWithCallback = context.Resolve<DisposeObserver>();
        // When this helper is disposed,we know that the lifetime of "instance" is over.
        disposableWithCallback.DisposingCallback =
            // So we can unhook it from the manager:
            () => resetManager.UnregisterInstance(resettable);
    }

    public class DisposeObserver : IDisposable
    {
        public Action DisposingCallback { get; set; }
        public void Dispose()
        {
            DisposingCallback?.Invoke();
            DisposingCallback = null;
        }
    }
}

解决方法

来自https://en.cppreference.com/w/cpp/symbol_index/chrono_literals

这些运算符在命名空间std::literals::chrono_literals中声明,其中literalschrono_literals都是内联命名空间。可以使用using namespace std::literalsusing namespace std::chrono_literalsusing namespace std::literals::chrono_literals来访问这些运算符。

因此,只需将using namespace std::literals::chrono_literals;添加到文件中,就可以了。


编辑:

无论上述问题如何,您都在错误地构造线程t2t3。代替接受std::thread&作为参数的lambda,您可能打算通过引用将其捕获到lambda中,如下所示:

    std::thread t1(printt1,1);
    std::thread t2([&t1]() { t1.join();std::cout << 2<<std::endl; });
    std::thread t3([&t2]() { t2.join();std::cout << 3<<std::endl; });
    t3.join();

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...