【发布时间】:2016-05-18 11:33:07
【问题描述】:
这是我正在处理的一个较小版本的用例。
#include <mutex>
template<typename T = float>
class Foo
{
public:
Foo(int x, int y):m_mutex(){}
private:
std::mutex m_mutex; // This is must have in my project
};
typedef Foo<float> Foo_typedef;
class Func
{
public:
static Foo_typedef static_array[2];
};
Foo_typedef Func::static_array[2] = { Foo_typedef(2,3), Foo_typedef(2,3) };
int main()
{
return 0;
}
编译此 VS 2015 Update 2 后会发出以下错误。
error C2280: 'Foo<float>::Foo(const Foo<float> &)': attempting to reference a deleted function
note: see declaration of 'Foo<float>::Foo'
我环顾四周,我怀疑这可能是两个原因之一。
1) std::mutex 的复制构造函数成员被删除
2) This 我认为可能与我看到的相似。
是哪一个?我该怎么做才能绕过 VS 2015 Update 2 编译器抛出的这个错误?
更新:更新了构造函数,它接受了一些需要传递给Foo_typedef的参数。
【问题讨论】:
-
你能简单地删除初始化程序吗?即
Foo_typedef Func::static_array[2]; -
Foo_typedef Func::static_array[2]{};
标签: c++ visual-c++ visual-c++-2015