C++中的函数指针出现问题
Issue with function pointers in C++
我计划使用函数指针来实现类中的不同函数。然而,我在尝试实现这样一个函数时遇到了一些麻烦。
代码在这里:
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
是我对函数指针有什么误解,还是另一个问题?
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;
不能同时声明函数和函数指针。
简单定义您的功能:
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;
实现了函数,函数指针可以指向函数。函数指针本身没有实现。
更改为:
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中,引入了移动语义,因此在这种情况下按值返回的成本显著降低,因为名为vec_p
的vector
将被从中移动(因为它即将过期),而不是从中复制。如果必须动态分配,请使用智能指针的形式。
这不是定义函数指针的方式。首先用您拥有的主体定义函数,然后将其分配给函数指针。
相关文章:
- 关于 c++ 函数中指针赋值的简单问题
- 链表指针问题
- C++ 关于指针取消引用的技术问题
- C++中的指针和常量问题不大
- 包含矢量指针的结构的内存释放问题
- 指针问题:从不兼容的类型"int"分配给"int *"
- 将字节数组转换为带有字节序问题的指针
- 关于如何使用指向主窗口的指针的 QT 问题
- 当成员值从指针更改为非指针时,C++常量问题
- 为什么循环会导致指针出现问题?
- 使用指针计算堆栈问题的大 O 表示法
- 构造函数 (C++) 中的 char 指针参数存在问题
- 指向包含对齐 C 结构C++类的 C 指针的对齐问题
- 涉及指针和手动实现的矩阵类的问题
- 从基指针到派生的强制转换问题
- 迭代器的指针操作问题
- 64 位迁移问题:指针更改
- C++模板使用问题指针
- 跳到C++第13章练习问题4-指针
- 用std::pair数组初始化std::map问题(指针错误?)