gpt4 book ai didi

C++创建线程报错?

转载 作者:行者123 更新时间:2023-11-30 01:38:33 24 4
gpt4 key购买 nike

我在做一个项目,遇到了循环依赖的问题。我最初希望 Device 类使用 Simulation 类相互发送消息,为此,Simulation 类必须有一个记录的所有已创 build 备的列表,以便向它们发送中继消息。

无论如何,我尝试了另一种方法来解决循环依赖问题,使用中间人 -- void RelayMessage()。在我取消注释线程声明之前,它工作正常。我不知道为什么它会给我错误:

Severity Code Description Project File Line Suppression State Error (active) E1776 function "Device::Device(const Device &)" (declared implicitly) cannot be referenced -- it is a deleted function testingProject c:\Users\osfer\Documents\Visual Studio 2017\Projects\testingProject\testingProject\main.cpp 37

代码如下:

#include <vector>
#include <string>
#include <thread>
static void RelayMessage(std::string message);


class Device {
public:
std::string incomingMessage = "";
std::string composedMessage;
//std::thread inputStream; // uncommenting this creates an error in class Simulation @ line 36
void relayMessage() {
RelayMessage(composedMessage);
}
void InputStream() {
while (true) {
if (incomingMessage != "")
printf("Message recieved!\n");
incomingMessage = "";
}
}
};

class Simulation {
public:
// record devices in simluation
static std::vector<Device> devicesInSim;
Simulation() {
// create 2 devices
devicesInSim.push_back(Device());
devicesInSim.push_back(Device());
}
};

static void RelayMessage(std::string message) {
// relays message to all devices
for (Device device : Simulation::devicesInSim) // error
device.incomingMessage = message;
}

int main() {
return 0;
}

最佳答案

您正试图在 for 循环中复制对象。 thread 不可复制。您应该改为使用引用进行迭代:

static void RelayMessage(std::string message) {
// relays message to all devices
for (auto& device : Simulation::devicesInSim)
device.incomingMessage = message;
}

(你也可以使用Device&代替auto&,但是auto在这里很清楚。)

无论如何,这可能就是您的想法。如果没有引用,您将更改对象拷贝上的 incomingMessage,而不是 vector 中包含的实际对象。使用基于范围的 for 循环时,您需要记住,这会迭代容器中元素的拷贝:

for (auto i : container)

要遍历实际对象,请使用:

for (auto& i : container)

对于元素的只读访问,使用:

for (const auto& i : container)

关于C++创建线程报错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47503402/

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