我打算使用函数指针在类中实现不同的函数。 但是,在尝试实现一个这样的函数时,我遇到了一些麻烦。
代码在这里:
std::vector<int> * (*create_vector)()
{
std::vector<int> * vec_p = new std::vector<int>;
return vec_p;
}
错误如下:
3: [Error] expected primary-expression before '*' token
3: [Error] 'vec_p' was not declared in this scope
3: [Error] expected '}' before ';' token
4: [Error] expected unqualified-id before 'return'
5: [Error] expected declaration before '}' token
我是否对函数指针有误解,或者它是一个不同的问题?
答案 0 :(得分:8)
std::vector<int> * (*create_vector)()
声明一个指向函数的指针。一个指针。不是功能。你不能继续使用指针并假装它是一个函数并定义它的主体。你需要单独声明两个:
std::vector<int> * create_vector()
{
std::vector<int> * vec_p = new std::vector<int>;
return vec_p;
}
std::vector<int> * (*pcreate_vector)() = create_vector;
答案 1 :(得分:5)
您不能同时声明函数和函数指针。
只需定义您的功能:
std::vector<int>* create_vector()
{
std::vector<int>* vec_p = new std::vector<int>;
return vec_p;
}
然后,最好是制作一个typedef(代码可读性):
typedef std::vector<int>* (*create_vector_func)();
现在你可以使用它了:
create_vector_func myFunc = &create_vector;
答案 2 :(得分:2)
实现了函数,函数指针可以指向函数。函数指针本身没有实现。
更改为:
std::vector<int>* create_vector()
{
std::vector<int> * vec_p = new std::vector<int>;
return vec_p;
}
然后你可以声明一个指向create_vector()
的函数指针。使用typedef
:
typedef std::vector<int>* (*func_t)(); // C++03
typedef decltype(&create_vector) func_t; // C++11
func_t f = create_vector;
auto f = create_vector; // C++11 option also.
尽可能避免动态分配,因为它会增加复杂性,使代码更容易出错。在C ++ 11中,引入了移动语义,因此在这种情况下按值返回的成本会显着降低,因为名为vector
的{{1}}将被移动(因为它即将到期),而不是从中复制。如果必须动态分配,请使用smart pointer的形式。
答案 3 :(得分:1)
这不是您定义函数指针的方式。首先使用您拥有的主体定义函数,然后将其指定给函数指针。