“使用auto说明符声明的变量不能出现在自己的初始值设定项中”

时间:2017-07-01 04:43:03

标签: c++ c++14

使用尾随返回类型时似乎有错误 Func_ptr的函数指针声明。我知道如果我将声明和初始化放在同一个语句中,或者只是通过直接指定返回类型来使用标准声明,我就可以做到,但我想了解语言的局限性,所以有人可以解释一下这个错误在代码如下:

  

“使用自动类型说明符声明的变量不能出现在其中   自己的初始化程序“

#include <utility>
#include <iostream>

int Func(const std::pair<int, int>& p)
{
    std::cout << p.first << "->" << p.second << std::endl;
    return 1;
}

int main()
{
    auto (*Func_ptr)(const std::pair<int, int>& p) -> int;
    //Error below, Func_ptr underlined, "a variable declared with the auto
    //specifier cannot appear in its own initializer
    Func_ptr = Func;
}

1 个答案:

答案 0 :(得分:0)

问题是变量是用C ++ 03样式和函数格式用C ++ 11方式声明的。使它统一,它会工作。

// the old way
int (*Func_ptr1)(const std::pair<int, int>& p);

// the C++11
auto func_ptr2 = &Func;

Here is example。 更有趣的是Clang is able to handle mixture