赋值功能起作用

时间:2014-05-15 13:53:29

标签: c++ function

请解释我为何下面的代码不起作用

#include <stdio.h>

int foo() { return 1; }
int bar() { return 2; }

void ass()
{
    foo=bar;
}

int main()
{
    ass()
}

以下错误

test.cpp: In function ‘void ass()’:
test.cpp:8:8: error: assignment of function ‘int foo()’
test.cpp:8:8: error: cannot convert ‘int()’ to ‘int()’ in assignment

引起的。

3 个答案:

答案 0 :(得分:3)

您必须使用函数指针。您无法自行分配该功能。

int(*baz)() = &foo;
baz();

答案 1 :(得分:1)

试试这个:

typedef int (*int_funcptr_void)(void);

然后,你可以简单地说:

int foo() { return 1; }
int bar() { return 2; }

int_funcptr_void func;

void ass()
{
    func = (int_funcptr_void)foo;
}

int main()
{
    ass(); //you also forgot a semicolon here, but nice naming
    //then, we can call it:
    printf("%d\n", func());
}

得到这个:

hydrogen:tmp phyrrus9$ ./a.out
1

希望有所帮助。

答案 2 :(得分:0)

您无法将function分配给function,因为您无法将int分配给int。您可以自然地将 int变量分配给另一个 int变量,这意味着您要将第二个变量的 rvalue 分配给左值(地址)第一个。对于函数的规则相同,您可以将函数对象分配给另一个函数对象。区别在于,功能是代码,而不是数据,但它有一个地址(起点)。因此,为彼此分配函数通常意味着将函数的地址分配给可以保存地址的变量,即函数指针。

void f(){}

typedef void(*pF)(); //typedef for easy use

pf foo;  //create a function pointer object
foo = &f; //assign it the address of the function