簡體   English   中英

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_pvector將從(當它到期時) 移動而不是從中復制。 如果必須動態分配使用一種形式的智能指針

這不是您定義函數指針的方式。 首先使用您擁有的主體定義函數,然后將其指定給函數指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM