• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

VC++ 2012 - kompiluje się z błędem ale wszystko niby działa

0 głosów
355 wizyt
pytanie zadane 22 września 2016 w C i C++ przez Krzysztof Rak Bywalec (2,420 p.)

Witam,
Nie wiem czy faktycznie w programie jest jakiś błąd czy tylko IDE złapało jakiegoś laga. Otóż podczas kompilacji pojawia się poniższy error, ale program działa normalnie. Czy powinienem się tym przejmować?

1 odpowiedź

+1 głos
odpowiedź 22 września 2016 przez criss Mędrzec (172,570 p.)
wybrane 22 września 2016 przez Krzysztof Rak
 
Najlepsza
Pokaż odnośnie jakiej linijki ten błąd sie pojawia, to ci powiemy czy się przejmować... :| (dlaczego trzeba o tym mówić)

Ogólnie intellisense ma racje, bo std::thread w ogóle nie ma konstrukora kopiującego (= delete). Ale to nie kompilator, tylko jakiś sprytne coś interpretujące kod i dające znak programiście o ew. błędach jeszcze zanim spróbuje skompilować. Czasem się myli, więc błąd może być bezzasadny. Po prostu pokaż ten kod.
komentarz 22 września 2016 przez Krzysztof Rak Bywalec (2,420 p.)
edycja 22 września 2016 przez Krzysztof Rak

Wygląda to w ten sposób: 

//Main.cpp

#include "stdafx.h"
#include "Contact.h"
#include "Update Service.h"
#include "Func.h"
#include <vector>
#include "sstream"
#include "Monitor.h"

#include <taskschd.h>
# pragma comment(lib, "taskschd.lib")
# pragma comment(lib, "comsupp.lib")
#include <comutil.h>

#include <direct.h>

#include "opencv2/highgui.hpp" 
#include "opencv2/imgproc.hpp"
#include "cv.h"


#include <Mmsystem.h>
#include <mciapi.h>
#pragma comment(lib, "Winmm.lib")

#include <WinUser.h>
#include <shellapi.h>

#define GetCurrentDir _getcwd
#define BUFFER 8192

char currentDir[FILENAME_MAX];

int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPTSTR    lpCmdLine, _In_ int       nCmdShow)
{

Monitor monitor;

thread monitorThread(Monitor.Run); // Tutaj podkreśla błąd pod Monitor
}

// Monitor.h

#pragma once
#include <string>
#include "Contact.h"
#include "vector"
#include <fstream>
#include <iostream>
#include <time.h>

using namespace std;

class Monitor
{
public:
	Monitor(void);
	~Monitor(void);
        static void Run();
}; 

// Monitor.cpp

#include "stdafx.h"
#include "Monitor.h"

Monitor::Monitor(void)
{
}


Monitor::~Monitor(void)
{
}

void Monitor::Run()
{
    // bez znaczenia jaki kod jest tutaj
}

 


 

komentarz 22 września 2016 przez criss Mędrzec (172,570 p.)
thread monitorThread(Monitor.Run);

I to się kompiluje? o_O Co to w ogóle znaczy Monitor.Run ? Monitor to klasa (nie obiekt), więc do czego ma się odnosić operator kropki?

W ten sposób:

thread monitorThread(&Monitor::Run, monitor);

Ampersand na wszelki wypadek (bez też powinno być dobrze).

Pamiętaj, że przy niestatycznych metodach trzeba podać też obiekt na rzecz którego zostanie metoda wywołana. Np. zakładając, że Run jest niestatyczne:

thread monitorThread(&Monitor::Run, std::ref(monitor));

std::ref (w uproszczeniu) pozwala na przesłanie przez referencje (musimy sami o to zadbać bo konstruktor std::thread jest tworzony z template-a.

Anyway Monitor.Run nie powinno się kompilować.

Co do samego błędu, to możesz spać spokojnie, nie wiem skąd się wziął.

Podobne pytania

0 głosów
0 odpowiedzi 201 wizyt
pytanie zadane 20 lutego 2017 w C i C++ przez Koszmar Początkujący (290 p.)
+1 głos
1 odpowiedź 298 wizyt
pytanie zadane 4 czerwca 2020 w HTML i CSS przez Dybcio Nowicjusz (200 p.)
0 głosów
1 odpowiedź 1,808 wizyt

93,695 zapytań

142,613 odpowiedzi

323,225 komentarzy

63,226 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...