gpt4 book ai didi

c++ - 错误:使用已删除的函数‘std::atomic<_Tp>::atomic()

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:46 25 4
gpt4 key购买 nike

我在 cpp 中得到了这段代码(这是我收到错误的最小示例):

#include <cstdio>
#include <functional>
#include <iostream>
#include <atomic>

const int N = 128;

template <typename T> struct Element {
const T * key{nullptr};
bool occupied{false};

Element( const T* key, bool occupied ) : key( key ), occupied( occupied ) {}
Element() : key{}, occupied{} {}
};

template <typename T>
class AtomicHashSet {
std::atomic<Element<T>> table[N];

public:
AtomicHashSet() : table{} {}

size_t hash( const T& key ) const {
return std::hash<const T>()( &key );
}

bool insert( const T& key ) {
Element<T> e{};
e.key = &key;
e.occupied = true;

for ( size_t i = 0; i < N; ++i ) {
size_t idx = ( hash( key ) + i ) % N;

Element<T> empty{};
if ( table[idx].compare_exchange_strong( empty, e ) ) {
return true;
}
else if ( table[idx].load().key == &key ) {
return false;
}
}
return false;
}
};

int main() {
AtomicHashSet<int> set;
int one = 1;
std::cout << "insert hello 1: " << set.insert(one) << std::endl;
return 0;
}

报错如下:

error: use of deleted function ‘std::atomic<_Tp>::atomic() [with _Tp = Element<int>]’
AtomicHashSet() : table{} {}

我之前在另一行遇到了同样的错误,因为我忘记了“Element”结构中的默认构造函数。这次我做错了什么?

有人可以帮我吗?非常感谢!

最佳答案

错误信息令人困惑。但是问题是atomic的constructor声明为noexcept,而你的Element的constructor不是,所以不能调用。如果您将 noexcept 添加到 Element 的构造函数,它将编译:

Element() noexcept : key{}, occupied{} {}

关于c++ - 错误:使用已删除的函数‘std::atomic<_Tp>::atomic(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40854566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com