本地功能定义是非法的

时间:2014-11-13 23:38:21

标签: c++

因此我在C ++中调用函数时很烦恼,因为我对这种语言还很新,我已经被困在这个错误上20分钟了,我找不到答案任何地方。它一直给我错误:error C2601: 'TimesTwo : local function definitions are illegalTest函数相同。

#include <iostream>
using namespace std;

int TimesTwo(int num1);
int Test(int a);

int main()
{
    int TimesTwo(int num1)
    {
        int result;
        result = num1 * 2;

        return result;
    }

    int Test(int a)
    {
        int result;
        int num1;
        cin >> num1;
        result = TimesTwo(num1);
        return result;
    }
    return 0;
}

3 个答案:

答案 0 :(得分:3)

您的Test功能内部有TestTwomain 功能。

答案 1 :(得分:1)

main例程之外定义您的函数。

答案 2 :(得分:0)

虽然上述局部函数定义是非法的,但 C++ 通过 lambda 支持局部函数。以下在 C++11 及更高版本中是合法的。

#include <iostream>
using namespace std;

int main()
{
    auto TimesTwo = [](int num1)
    {
        int result;
        result = num1 * 2;

        return result;
    };

    auto Test = [&TimesTwo](int a)
    {
        int result;
        int num1;
        cin >> num1;
        result = TimesTwo(num1);
        return result;
    };

    using fp = int (*)(int);
    fp f1 = TimesTwo; // non-capturing lambda can be converted to function pointer.
    
    return 0;
}

lambda 的一个有用特性是不捕获任何内容的 lambda 可以转换为函数指针。