我很难理解这些编译错误的来源。
以下代码在gcc-4.9.3和clang-3.8上编译没有任何问题,但在VS 2013上失败。
class Sample
{
public:
template<typename T>
explicit Sample(T& in) :
x(in),
lamb( [](Sample& ss)
{
std::cout << "This works !!\n" << static_cast<const T&> (ss.get()) << std::endl;
}){}
const int get() const { return x; }
private:
int x;
std::function<void(Sample&)> lamb;
};
int main()
{
int z = 10;
Sample a(z);
return 0;
}
我最终遇到以下错误:
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2061: syntax error : identifier 'T'
MSDN对这些错误的解释并没有多大帮助。我在这里做错了什么?
答案 0 :(得分:1)
看起来Visual Studio没有将关于模板类型T的信息传递给lambda。我已经将类变量传递给lambda以收集所需的类型信息。这样的事情有效:
#include <functional>
#include <iostream>
class Sample
{
public:
template<typename T>
explicit Sample(T& in) :
x(in),
lamb( [this](Sample& ss)
{
std::cout << "This works !!\n" << static_cast<decltype(x)> (ss.get()) << std::endl;
}){}
const int get() const { return x; }
private:
int x;
std::function<void(Sample&)> lamb;
};
int main()
{
int z = 10;
Sample a(z);
return 0;
}