편집 : 올바른 제목은 "기본 클래스에서 오버로드 된 실제 가상 함수 호출"이었습니다. 문제의 큰 부분 이었기 때문입니다.기본 클래스의 실제 가상 함수 호출
나는 실제 가상 기능과 다른 정상적인 기능을 가진 기본 클래스를 가지고 있습니다. 하나는 정상적인 것들은 스레드에서 가상 함수를 호출하고, 나는 이해가 안되는 그 라인에 오류가 발생합니다. 나는 그것이 스레드와 관련이 있다고 생각하지만 기본 클래스는 추상 클래스이고 모든 파생 클래스는 실제로 가상 함수를 구현해야하므로 문제가 없어야합니다. 어쩌면 완전히 다른 무언가 일 수 있습니다.
class Base {
virtual int getInfo(int a) = 0; // the culprit?
void getInfo(); // is implemented, calls getInfo(int); Does
// actually have the same name. Works perfectly fine.
void getThreadedInfo(); // for details, see below
}
// ..later..
Base::getThreadedInfo() {
...
for(int i=0; i<maxThreads; i++) {
threads.push_back(thread(getInfo, i)); // this is line 85
}
...
}
전체 오류 메시지는 다음과 같습니다 : 이것은 어떻게 생겼는지 더 많거나 적은 &Base::getInfo
로
threads.push_back(std::thread(static_cast<int (Base::*)(int)>(&Base::getInfo), this, i));
가 모호 :
는Error 1 error C3867: 'Base::getInfo': function call missing argument list; use '&Base::getInfo' to create a pointer to member
c:\path\to\base.cpp 85 1 Project
Error 2 error C2661: 'std::thread::thread' : no overloaded function takes 2 arguments
c:\path\to\base.cpp 85 1 Project
과부하가 문제 일 수 있다고 생각했습니다. 어떻게 완료했는지 알려 주셔서 감사합니다. – Arne
그에 따라 모든 것을 변경했습니다. – Arne