小编Obs*_*ian的帖子

std::atomic 等待操作如何工作?

从 C++20 开始,std::atomicwait()and notify_one()/notify_all()操作。但我不明白它们到底是如何工作的。cppreference 说

执行原子等待操作。其行为就像重复执行以下步骤:

  • 将 this->load(order) 的值表示与旧的值表示进行比较。
    • 如果它们相等,则阻塞直到*this收到notify_one()或notify_all()通知,或者线程被虚假地解除阻塞。
    • 否则,返回。

仅当值发生更改时,这些函数才保证返回,即使底层实现虚假地解除阻塞。

我不太明白这两个部分是如何相互关联的。这是否意味着如果值没有改变,那么即使我使用notify_one()/notify_all()方法,该函数也不会返回?这意味着该操作在某种程度上等于以下伪代码?

while (*this == val) {
    // block thread
}
Run Code Online (Sandbox Code Playgroud)

c++ c++20

13
推荐指数
1
解决办法
1648
查看次数

CMake 错误:conan 配置文件之间的编译器版本不匹配

我在 MacOS 上。

这是我的错误:

build/conanbuildinfo.cmake:625 处出现 CMake 错误(消息):检测到 conan 配置文件设置和 CMake 之间的编译器版本不匹配:

conan 配置文件中指定的编译器版本:11.0

CMake 中检测到的编译器版本:12.0

请检查您的柯南个人资料设置(柯南个人资料显示 [default|your_profile_name])

这是我的 cmakefile:

   project(Babel)
cmake_minimum_required(VERSION 2.8.12)
add_definitions("-fPIC")

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

find_package(Qt5Widgets CONFIG REQUIRED)

file(GLOB_RECURSE BABEL_SRC PATH ./sources/*.cpp)

include_directories(${CMAKE_INCLUDE_PATH})
add_executable(babel ${BABEL_SRC})
target_link_libraries(babel ${CONAN_LIBS} Qt5::Widgets)
Run Code Online (Sandbox Code Playgroud)

谢谢。

c++ cmake conan

8
推荐指数
1
解决办法
9843
查看次数

如何解决 Git 分支名称中的大小写问题?

我在 Github 存储库中有一个分支,名称如下:feature/X/mybranch。一位同事对我的分支进行了更改,但将其提交给feature/x/mybranch. Github 似乎区分大小写,在他的提交中创建了一个单独的分支。

现在的问题是我的 Git 客户端只能看到一个分支(我在 macOS 上),即原来的大写分支。这会带来各种各样的问题。最初,我什至看不到他的提交,并且在不知道真正的问题是什么的情况下,我尝试了不同的方法,最终能够在git reset --hard. 然而,一些副作用仍然存在。例如,我的客户不断告诉我,我有尚未推送的提交,尽管我可以在 Github 中看到它们。

理想情况下,我只想将他的分支合并到我的分支中并删除它(或者甚至只是删除,因为我很确定我拥有他的所有更改),但我不知道该怎么做。如前所述,我的客户(在终端和 Sourcetree 中都尝试过)只看到一个分支,而且我真的不知道如果删除它会发生什么。

git github

5
推荐指数
1
解决办法
2665
查看次数

QObject::connect: 需要括号,信号 QSerialPort::readyRead in ..\voltage_sensor\dialop.cpp:41

我不知道为什么 Qt 将这个输出给我。代码编译成功,所有语法格式正确。我曾尝试查看不同的论坛帖子,但无法查明错误。

我目前正在用面包板、电路和灯泡进行测试;所有硬件都正常工作,我能够在 Arduino 软件中捕获电压(如果需要,我可以添加 Arduino 代码)。

我遇到的问题是我无法在 Qt 中显示电压。我正在使用 Arduino Uno 和 Arduino 电压传感器(VCC <25V)。

电压传感器.pro

QT       += core gui serialport

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = voltage_sensor
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your …
Run Code Online (Sandbox Code Playgroud)

c++ user-interface qt arduino

4
推荐指数
1
解决办法
2768
查看次数

运行时错误:将无符号偏移量添加到 0x603000000040 溢出到 0x603000000034 (stl_vector.h)

我正在解决滑动窗口最大值问题,但我在 Leetcode 上收到以下错误,但它在我的本地编译器上运行 [VSCode]

第 1034 行:Char 34:运行时错误:将无符号偏移量添加到 0x603000000040 溢出到 0x603000000034 (stl_vector.h)
摘要:UndefinedBehaviorSanitizer:未定义行为/usr/bin/../lib/gcc/x86_64-linux-gnu/9/ ../../../../include/c++/9/bits/stl_vector.h:1043:34

这是代码:

#include <deque>

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& A, int k) {
        
        int _max = INT_MIN;
        vector<int> ans;
        for (int i = 0; i < k; ++i)
        {
            _max = max(_max, A[i]);
        }
        if (k == A.size()){
            return {_max};
        }
        
        ans.push_back(_max);
        deque<int> dq;
        dq.push_back(_max);

        for (int i = k; i < A.size(); ++i)
        {
            if (dq.empty())
            {
                dq.push_back(i);
                _max = A[i];
            }
            else …
Run Code Online (Sandbox Code Playgroud)

c++ runtime-error deque

4
推荐指数
1
解决办法
1万
查看次数

C/C++ 构建通用栈帧来调用不同的回调函数

我正在重构一个 C++ 应用程序,它引用了一堆多个回调函数,每个回调函数都有不同数量的参数,我想知道在调用每个函数之前是否有一种通用的方法来构建专用的参数堆栈框架。

换句话说:首先根据要调用的函数获取所有必需的参数,然后执行对被调用函数透明的调用。

在某种程度上,这与可变参数函数相反,因为这将是一个知道它可以接收不同数量参数的单个函数。在这里,我有一堆不可变的常规函数​​,我想从通用集线器调用它们。

我把CC++标签都放在这里是因为我对这两种语言的命题都很感兴趣,我觉得适用于 C 的东西也适用于 C++,我仍然对“仅限 C++”的解决方案持开放态度,例如可变参数模板等。

所有这一切的背景是引用的程序实际上是在解析命令行,然后根据命令的名称调用函数,作为程序名称后的第一个参数传递,然后所有必需的作为纯字符串,但取决于调用的命令.

我知道我可以写这样的东西:

    if(nb_of_args == 1)
        my_callback_ptr(argv[n]);
    else if (nb_of_args == 2)
        my_callback_ptr(argv[n],argv[n+1]);
    else if (nb_of_args == 3)
        my_callback_ptr(argv[n],argv[n+1],argv[n+2]);
    else if (nb_of_args == 4)
        my_callback_ptr(argv[n],argv[n+1],argv[n+2],argv[n+3]);
    else if…
Run Code Online (Sandbox Code Playgroud)

...无论函数本身如何,将编译调用限制为唯一数量的参数,但我仍然希望做得更好。

在此先感谢大家。

c c++ variadic stack-frame

4
推荐指数
1
解决办法
119
查看次数

Pyintsaller Execuatble RuntimeError:找不到脚本运行服务器

我使用 Pyinstaller 在 Linux 上创建了一个 Django 应用程序可执行文件“testrun”。

然后我使用该命令dist/testrun/testrun runserver: localserver:8000来测试可执行文件。但错误信息显示:

RuntimeError: Script runserver not found
Run Code Online (Sandbox Code Playgroud)

用于可执行构建的规范文件隐藏导入

可执行运行时错误消息

linux django pyinstaller

3
推荐指数
1
解决办法
1079
查看次数

C 中通过 scanf 实现复数

我对以下代码片段有问题:

int main()
{
    int n = 3;

    complex_t t[3];
    for(int i = 0; i < n; i++)
    {
        double x, y;
        printf("Enter complex number: ");
        scanf("%f %f", &x, &y);
        t[i].re = x;
        t[i].im = y;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试将 x 和 y 传递给程序时,它的值不会改变,而是 0.00000。你能帮助我吗?

c

3
推荐指数
1
解决办法
282
查看次数

Laravel 护照 7.5.1 - 复制声明

我们有一个与 laravel/passport 相关的新错误:7.5.1。今天,这个图书馆已经像上周一样工作了。但这停止通过邮递员显示此消息:

不推荐将声明复制为标头,并将从 v4.0 中删除。如果您需要复制标题,请手动设置标题。

有人知道这个问题吗?

我们不知道如何继续这个......

我们正在使用 Laravel 5.7(我们知道......)

php laravel laravel-passport laravel-5.7

1
推荐指数
2
解决办法
5949
查看次数

为什么这个指针做作会引发错误?

最近开始研究指针,想知道为什么char *n = “hii”; char *p = &n;会显示error

#指向地址#

#include<stdio.h>
#include<string.h>
#include<cs50.h>


int main(void)
   {
        char *n = "hii";
        /*why the below line is showing the error as it has no impact on the result, below the pointer p is pointing to address of n*/
        char *p = &n;
        printf("%i\n", &n);              

   }
  
Run Code Online (Sandbox Code Playgroud)

c pointers declaration pointer-to-pointer

1
推荐指数
1
解决办法
55
查看次数

如何在C中返回指向字符串数组的指针

函数如何返回指向字符串数组的指针?

我必须不使用C的string.h库来执行此操作。这是我到目前为止的内容:

#include <stdio.h>
#include <stdlib.h>

char* myFunc(){
    char* result[2];

    // the strings are originally dynamically allocated with some
    // function parameters which i've omitted to simplifiy the question.

    result[0] = "abc";
    result[1] = "def";
    return result;   
}

int main(void){
    char* result = myFunc();
    printf("%s\n%s\n", result[0], result[1]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望有两个字符串,但是编译器将返回以下内容:

error: return from incompatible pointer type [-Wincompatible-pointer-types]
     return result;
Run Code Online (Sandbox Code Playgroud)

c arrays string pointers

-1
推荐指数
1
解决办法
80
查看次数