2014-11-13 3 views
0

좋아요.이 함수는 double 매개 변수로 9 개의 매개 변수를 사용하는 storePose(); 함수를 실행하는 스레드를 C++로 만들려고합니다. 스레드를 만들려고 할 때마다 매개 변수에 대해 불평합니다. 아래 코드를 게시 할 것입니다. 나는 이것이 실용적인 이유가 무엇인지 모른다. 고급스레드 함수에 인수를 전달할 수 없습니다.

CODE 감사 :

std::thread t(storePose,x_position, y_position, z_position, azimuth, att_pitch, att_roll, yaw, cam_pitch, cam_roll); 
    t.detach(); 

ERROR 주어진 :

12 IntelliSense: no instance of constructor "std::thread::thread" matches the argument list 
     argument types are: (<unknown-type>, double, double, double, double, double, double, double, double, double) 

편집 : 내가 비주얼 스튜디오

+0

_'Intellisense'_ 무엇입니까? 정말 친절한 당신의 실제 IDE를 지정하십시오 적어도 제발! –

+0

죄송합니다. Visual Studio 2012 –

답변

1

Microsoft Visual C++ (2012)는 가변적 템플릿을 지원하지 않습니다. 그들은 faux variadics이라는 매크로를 통해 오버로드를 줄입니다. 문제는 variadic 템플릿에 전달할 수있는 인수의 수에는 제한이 있으며 기본적으로 제한은 5입니다. _VARIADIC_MAX을 더 큰 수로 정의하여 제한을 조정할 수 있습니다 (예 : 제한 10 세트의 경우 /D_VARIADIC_MAX=10)

thisthis을 참조하십시오.

+0

그게 도움이 될거에요, 정확히 어디에서 설정해야할까요? 이 유형의 프로그래밍에 미안합니다. –

+0

솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하십시오. Properties ...를 선택하고 C/C++ -> Preprocessor로 이동하여 _VARIADIC_MAX = 10을 "Preprocessor Definitions"에 추가하십시오. 프로젝트의 모든 구성 (디버그, 릴리스 등)에 대해 그렇게해야합니다. –

+0

정말 고마워요. 나는 이것을 몇 시간 동안 어지럽 혀왔다. 그리고 그것은 내가 얻었던 약간 높은 수준이다! 다시 한번 고맙습니다. 좋은 답변을 얻을 수 있다면 왜 두 번이나 투표했는지 확신 할 수 없습니다. 고맙습니다! –

-1
2012을 사용하고 있음을 언급하는 것을 잊었다 죄송합니다

너무 많음 rguments를 구조체에 넣고 스레드 함수에 구조체를 제공하고 구조체의 args를 처리합니다.

+0

죄송합니다.이 방법을 사용하겠습니다. 그러나 인수를 벡터에 넣으려고했는데 funciton이 너무 많이 오버로드되어 여전히 매우 유사한 오류가 발생했습니다. –

+0

storePos 함수의 서명이 주어진 논쟁? – Etixpp

+0

그렇습니다. funciton은 다음과 같이 선언되었습니다 :'void storePose (double lat, double lon, double alt, double attPaw, double attRoll, double camYaw, double camPitch, double camRoll); ' –

관련 문제