c++错误C2893:特化函数模板失败
c++ error C2893: Failed to specialize function template
我试图运行这个,但我一直收到一个错误。
#include <iostream>
#include <thread>
using namespace std;
void primeNumbers( int num, int prime )
{
cout << "The prime numbers equal to or below " << num << " are: " << endl;
for ( int i = 1; i <= num; i++ )
{
prime = 0;
for( int j = 2;j <= i/2; j++ )
{
if( i % j ==0 )
{
prime++;
break;
}
}
if ( prime == 0 && i != 1 )
cout << i << endl;
}
}
int main()
{
int num;
int prime = 0;
cout << "Enter a positive integer: ";
cin >> num;
std::thread primeN( primeNumbers );
primeN.join( );
system("pause");
return 0;
}
我已经从输出窗口复制了所有内容。
1>c:program files (x86)microsoft visual studio 14.0vcincludethrxthread(238): error C2893: Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...)'
1> c:program files (x86)microsoft visual studio 14.0vcincludethrxthread(238): note: With the following template arguments:
1> c:program files (x86)microsoft visual studio 14.0vcincludethrxthread(238): note: '_Callable=void (__cdecl *)(int,int)'
1> c:program files (x86)microsoft visual studio 14.0vcincludethrxthread(238): note: '_Types={}'
1> c:program files (x86)microsoft visual studio 14.0vcincludethrxthread(247): note: see reference to function template instantiation 'void std::_LaunchPad<_Target>::_Execute<0>(std::tuple<void (__cdecl *)(int,int)> &,std::integer_sequence<_Ty,0>)' being compiled
1> with
1> [
1> _Target=std::unique_ptr<std::tuple<void (__cdecl *)(int,int)>,std::default_delete<std::tuple<void (__cdecl *)(int,int)>>>,
1> _Ty=size_t
1> ]
1> c:program files (x86)microsoft visual studio 14.0vcincludethrxthread(247): note: see reference to function template instantiation 'void std::_LaunchPad<_Target>::_Execute<0>(std::tuple<void (__cdecl *)(int,int)> &,std::integer_sequence<_Ty,0>)' being compiled
1> with
1> [
1> _Target=std::unique_ptr<std::tuple<void (__cdecl *)(int,int)>,std::default_delete<std::tuple<void (__cdecl *)(int,int)>>>,
1> _Ty=size_t
1> ]
1> c:program files (x86)microsoft visual studio 14.0vcincludethrxthread(242): note: while compiling class template member function 'void std::_LaunchPad<_Target>::_Run(std::_LaunchPad<_Target> *) noexcept'
1> with
1> [
1> _Target=std::unique_ptr<std::tuple<void (__cdecl *)(int,int)>,std::default_delete<std::tuple<void (__cdecl *)(int,int)>>>
1> ]
1> c:program files (x86)microsoft visual studio 14.0vcincludethrxthread(230): note: see reference to function template instantiation 'void std::_LaunchPad<_Target>::_Run(std::_LaunchPad<_Target> *) noexcept' being compiled
1> with
1> [
1> _Target=std::unique_ptr<std::tuple<void (__cdecl *)(int,int)>,std::default_delete<std::tuple<void (__cdecl *)(int,int)>>>
1> ]
1> c:program files (x86)microsoft visual studio 14.0vcincludethrxthread(256): note: see reference to class template instantiation 'std::_LaunchPad<_Target>' being compiled
1> with
1> [
1> _Target=std::unique_ptr<std::tuple<void (__cdecl *)(int,int)>,std::default_delete<std::tuple<void (__cdecl *)(int,int)>>>
1> ]
1> c:program files (x86)microsoft visual studio 14.0vcincludethread(52): note: see reference to function template instantiation 'void std::_Launch<std::unique_ptr<std::tuple<void (__cdecl *)(int,int)>,std::default_delete<std::tuple<void (__cdecl *)(int,int)>>>>(_Thrd_t *,_Target &&)' being compiled
1> with
1> [
1> _Target=std::unique_ptr<std::tuple<void (__cdecl *)(int,int)>,std::default_delete<std::tuple<void (__cdecl *)(int,int)>>>
1> ]
1> c:usersandredocumentsschoolcsciprimeprimetestprime.cpp(34): note: see reference to function template instantiation 'std::thread::thread<void(__cdecl &)(int,int),,void>(_Fn)' being compiled
1> with
1> [
1> _Fn=void (__cdecl &)(int,int)
1> ]
我不太了解多线程,因为我昨天才开始学习它。所以,如果我做错了什么,请告诉我。
必须为可调用对象提供参数
的例子:
std::thread primeN( primeNumbers,42, 0 );
如果你想更新你的prime
,使用:
std::thread primeN( primeNumbers,42, std::ref(prime) );
看到
相关文章:
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 将重载的成员函数传递给函数模板
- 作为模板参数的成员函数指针在继承的成员函数上失败,如何以及为什么?
- 可变参数模板函数重载失败
- 在 GCC 中工作的外行构造函数模板在 Clang 中失败
- 为什么模板参数推导在重载函数时失败?
- 函数模板参数推断使用 std::Optional 失败
- 模板作为函数模板的参数 - 演绎失败
- C++:转发模板成员函数调用失败
- 函数模板实例化失败
- 使用函数指针作为参数匹配模板失败
- 当参数是引用时,可变模板构造函数选择失败
- 使用std::函数替换模板失败
- 使用Lambda函数转换模板失败
- 在线程中特化函数模板失败
- c++错误C2893:特化函数模板失败
- 使模板函数编译失败,并返回错误消息
- 可以实例化 C++ 类模板,但具有相同模板参数的函数模板实例化失败
- 为什么函数模板调用类模板的静态方法模板时编译失败
- 双模板函数重载失败