Добрый вечер всем!Ошибка C2248 в MVSE12 с std :: thread
Я пытаюсь код многопоточных приложения на С ++ с использованием Microsoft Visual Studio Express 2012
Идея нам о том, что «главная» функция вызова нить, которая будет работать «навсегда», с задачей обновление объекта.
Это главное:
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <thread>
#include <iostream>//debug only
#include <fstream> //debug only
#include "dataCollectorFTL.h"
int _tmain(int argc, _TCHAR* argv[])
{
dataCollectorFTL dataCollector1;
//Launch thread which will run forever and get the data flows
dataCollector1.runDataCollector();
while(true){
//application running
}
return 0;
}
Это является ".h" класса
#ifndef DATACOLLECTORFTL_H_INCLUDED
#define DATACOLLECTORFTL_H_INCLUDED
#include <thread>
class dataCollectorFTL {
public:
void runDataCollector();
void getData();
//constructor, destructor
dataCollectorFTL();
~dataCollectorFTL();
private:
HANDLE hProcess;
std::thread dataCollectorThread;
};
#endif // DATACOLLECTORFTL_H_INCLUDED
И, наконец, ".cpp"
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <thread>
#include "dataCollectorFTL.h"
void dataCollectorFTL::runDataCollector(){
//lauch a non-local thread
dataCollectorThread = std::thread(&dataCollectorFTL::getData, this);
}
void dataCollectorFTL::getData(){
//some stuff
}
dataCollectorFTL::dataCollectorFTL(){
//some stuff
}
dataCollectorFTL::~dataCollectorFTL(){
dataCollectorThread.join();
}
Проблема заключается в том что когда я запускаю его, он дает мне две ошибки:
Ошибка 1 ошибка C2248: 'std :: thread :: operator =': не может получить доступ к закрытому члену, объявленному в классе 'std :: thread' c: \ users \ damien \ documents \ visual studio 2012 \ projects \ recherche \ recherche \ datacollectorftl.h 233 1 Recherche
Ошибка 4 error C2248: 'std :: thread :: thread': не удается получить доступ к закрытому члену, объявленному в классе 'std :: thread' c: \ users \ damien \ documents \ visual studio 2012 \ Projects \ отборный \ отборный \ datacollectorftl.h 233 1 Recherche
Чтобы сэкономить время, я могу вам сказать, что:
- включить в .h ничего не изменит
- Содержание методов runDataCollector ничего не меняет. Даже если он пуст, я все еще есть проблемы
- станд :: нить dataCollectorThread может быть публичным или частным порядком, он ничего
не изменится Если я не декларируют в качестве члена класса, я имеют сбой программы, потому что я не присоединяюсь() к потоку в runDataCollector(). И я не хочу присоединяться к нему, имеет функцию getData() - это некоторая (истинная) функция, в которой он получает данные из другого мягкого.
Благодарим вас за то, что вы потратили на это чтение, и еще раз спасибо за любую помощь.
Вы пытаетесь скопировать-присваивать 'dataCollectorFTL' где-то. Конечно, не в коде, который вы опубликовали. – LogicStuff
Обе ошибки выделяют строку # 233 в 'datacollectorftl.h'. Не могли бы вы разместить эту точную строку? Вам трудно понять, где компилятор жалуется. –
Представленный код выглядит прекрасно; http://coliru.stacked-crooked.com/a/2c1af3a84792c771. Вы уверены, что не копируете родительский класс 'dataCollectorFTL' где-то, что приведет к ошибке, которую вы видите. Сделайте его операторы копирования и назначения частными, и сообщения об ошибках помогут диагностировать местоположение копии. Если нет, то [mcve] поможет здесь. – Niall