C++ 为什么调用定义的构造函数会导致结构声明中出现错误,我如何修复它?

C++ 为什么调用定义的构造函数会导致结构声明中出现错误,我如何修复它?,c++,C++,考虑以下编译的简短程序 void foobar() { } template <typename F> struct Foo{ F workFunction; Foo(F f) : workFunction(f) { } }; int main(){ Foo<decltype(foobar)> foo1(); } 代码无法编译,出现以下错误 g++ -std=c++11 -O2 Task.cc -o Task Task.cc: I

考虑以下编译的简短程序

void foobar() {
}

template <typename F> struct Foo{
    F workFunction;
    Foo(F f) :  workFunction(f) { }
};

int main(){
    Foo<decltype(foobar)> foo1();
}
代码无法编译,出现以下错误

g++ -std=c++11 -O2    Task.cc   -o Task
Task.cc: In instantiation of ‘struct Foo<void()>’:
Task.cc:10:38:   required from here
Task.cc:5:7: error: field ‘Foo<void()>::workFunction’ invalidly declared function type
     F workFunction;
Foo-foo1();

不是对象实例化,它是一个函数声明,不接受任何参数并返回
Foo

,如@bipll的回答所述,这是您询问的第一个语句:

Foo<decltype(foobar)> foo1();
我们只需将模板更改为:

模板结构Foo{
typename std::decation::type workFunction;
Foo(F):工作函数(F){}
};
现在,用一个例子:

#include <type_traits>

int foobar() {
    return 1;
}

template <typename F> struct Foo{
    typename std::decay<F>::type workFunction;
    Foo(F f) :  workFunction(f) { }
};

int main(){
    Foo<decltype(foobar)> foo1(foobar);
    std::cout << foo1.workFunction();
}
#包括
intfoobar(){
返回1;
}
模板结构Foo{
typename std::decation::type workFunction;
Foo(F):工作函数(F){}
};
int main(){
Foo-foo1(foobar);

你说的“works”是什么意思?@juanchopanza,我的意思是我正试图将函数传递给构造函数,以便以后可以调用它。你说的“works”是什么意思?@juanchopanza,我相信我的问题中的“works”一词已被删除,所以我不确定你问的是什么上下文。叹气。好的,你说的“work”是什么意思然后
Foo<decltype(foobar)> foo1();
Foo<decltype(foobar)> foo1();
Foo<decltype(foobar)> foo1(foobar);
template <typename F> struct Foo{
    typename std::decay<F>::type workFunction;
    Foo(F f) :  workFunction(f) { }
};
#include <type_traits>

int foobar() {
    return 1;
}

template <typename F> struct Foo{
    typename std::decay<F>::type workFunction;
    Foo(F f) :  workFunction(f) { }
};

int main(){
    Foo<decltype(foobar)> foo1(foobar);
    std::cout << foo1.workFunction();
}