Witam.
Dlaczego poniższy kod przy próbie kompilacji zwraca błędy i w jaki sposób można to naprawić?
main.cpp
#include "B.h"
B b;
int main()
{
std::thread mainThread;
mainThread = std::thread(&B::Logic, b);
mainThread.detach();
return 0;
}
B.h
#pragma once
#include "A.h"
class B
{
A a;
public:
void Logic();
};
B.cpp
#include "B.h"
void B::Logic()
{
a.Start();
while (true)
{
}
}
A.h
#pragma once
#include <thread>
class A
{
std::thread mainThread;
void Logic();
public:
void Start();
};
A.cpp
#include "A.h"
void A::Logic()
{
while (true)
{
}
}
void A::Start()
{
mainThread = std::thread(&A::Logic, this);
mainThread.detach();
}
Error C2280 'B::B(const B &)': attempting to reference a deleted function ...\microsoft visual studio 14.0\vc\include\tuple 75
Po usunięciu std::thread mainThread
z klasy A
problem nie występuje, jednak zależy mi na stworzeniu wątku wewnątrz klasy, który będzie uruchamiał jej funkcję.
Wątek z main.cpp
służy do uruchomiania głównej funkcji programu odpowiedzialnej za logikę, dzięki czemu główne okno programu nie jest zawieszone (WinApi
).
Wątek z klasy A
służy do przesyłu logów programu na serwer, mógłbym stworzyć go jako globalny obiekt w pliku main.cpp
, a następnie przesłać do A
, jednak to rozwiązanie nie wydaje mi się zbyt eleganckie.