Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何解决“被调用对象不是函数或函数指针”错误?_C_Pointers - Fatal编程技术网

C 如何解决“被调用对象不是函数或函数指针”错误?

C 如何解决“被调用对象不是函数或函数指针”错误?,c,pointers,C,Pointers,我对C相当陌生,正在尝试做一个骰子游戏。我正在尝试学习指针,需要一些关于使用在main中初始化的调用函数和指针的提示和建议 我在我的第一次点名功能中得到了错误信息,以确定第一个滚轴: 被调用对象“first_roll_call”不是函数或函数指针 这意味着什么,我该如何修复它 这是我的密码: #include <stdio.h> #include <stdlib.h> #include <time.h> int main () { int dice;

我对C相当陌生,正在尝试做一个骰子游戏。我正在尝试学习指针,需要一些关于使用在main中初始化的调用函数和指针的提示和建议

我在我的第一次点名功能中得到了错误信息,以确定第一个滚轴:

被调用对象“first_roll_call”不是函数或函数指针

这意味着什么,我该如何修复它

这是我的密码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main () {
    int dice;
    int roll, first_roll;
    int i;
    int first_roll_call;

    int *playerA;
    int *playerB;
    int *first_rollA;
    int *first_rollB;

    playerA = (int *)malloc(100);
    playerB = (int *)malloc(100);
    first_rollA = (int *)malloc(100);
    first_rollB = (int *)malloc(100);

    printf("Welcome to Dice Mania!\n\n");
    printf("First player to a combined score of 25 wins!\n");
    printf("We to see who goes first, press 1 to continue:");
    scanf("%d", &first_roll);

    for (i = 1; i < 2; i++){
        first_roll = rand() % 6 + 1;
        first_roll_call(first_roll, i, &first_rollA, &first_rollB);
    }
    if (*first_rollA > *first_rollB){
        printf("Player 1 goes first!\n");
    }
    else {
        printf("Player 2 goes first!\n");
    }

    if (dice == 1) {
        while (dice == 1) {
            printf("Please press 1 to initiate the dice roll, 0 to exit\n\n");
            srand(time(NULL));
            roll = rand() % 6 + 1;
            printf("You have rolled a: \n\n");
            dice = dice_roll(roll);
            if (dice == 0) {
                printf("\n\nThank you for playing");
                break;
            }
        }
    }

    return 0;
}

int dice_roll(int x) {
    int dice;

    if (x == 1) {
        printf("*************\n");
        printf("*  -----    *\n");
        printf("*      |    *\n");
        printf("*      |    *\n");
        printf("*      |    *\n");
        printf("*      |    *\n");
        printf("*  -------  *\n");
        printf("*************\n");

        printf("Please press 1 to initiate the dice roll, 0 to exit\n\n");
        scanf("%d", &dice);
        return(dice);
    }
    if (x == 2) {
        int dice;

        printf("*************\n");
        printf("*  _____    *\n");
        printf("*      |    *\n");
        printf("*  ____|    *\n");
        printf("*  |        *\n");
        printf("*  |____    *\n");
        printf("*           *\n");
        printf("*************\n");

        printf("Please press 1 to initiate the dice roll, 0 to exit\n\n");
        scanf("%d", &dice);
        return(dice);
    }
    if (x == 3) {
        int dice;

        printf("*************\n");
        printf("*  -----    *\n");
        printf("*      |    *\n");
        printf("*   ___|    *\n");
        printf("*      |    *\n");
        printf("*      |    *\n");
        printf("*  -----    *\n");
        printf("*************\n");

        printf("Please press 1 to initiate the dice roll, 0 to exit\n\n");
        scanf("%d", &dice);
        return(dice);
    }
    if (x == 4) {
        int dice;

        printf("*************\n");
        printf("*  |    |   *\n");
        printf("*  |    |   *\n");
        printf("*  |____|   *\n");
        printf("*       |   *\n");
        printf("*       |   *\n");
        printf("*       |   *\n");
        printf("*************\n*");

        printf("Please press 1 to initiate the dice roll, 0 to exit\n\n");
        scanf("%d", &dice);
        return(dice);
    }
    if (x == 5) {
        int dice;

        printf("*************\n");
        printf("*  _____    *\n");
        printf("*  |        *\n");
        printf("*  |____    *\n");
        printf("*       |   *\n");
        printf("*  _____|   *\n");
        printf("*           *\n");
        printf("*************\n");

        printf("Please press 1 to initiate the dice roll, 0 to exit\n\n");
        scanf("%d", &dice);
        return(dice);
    }
    if (x == 6) {
        int dice;

        printf("*************\n");
        printf("*  _____    *\n");
        printf("*  |        *\n");
        printf("*  |____    *\n");
        printf("*  |    |   *\n");
        printf("*  |____|   *\n");
        printf("*           *\n");
        printf("*************\n");

        printf("Please press 1 to initiate the dice roll, 0 to exit\n\n");
        scanf("%d", &dice);
        return(dice);
    }

int first_roll_call(int x, int y, int *first_rollA, int *first_rollB){
    int dice;

    if (x == 1) {
        printf("*************\n");
        printf("*  -----    *\n");
        printf("*      |    *\n");
        printf("*      |    *\n");
        printf("*      |    *\n");
        printf("*      |    *\n");
        printf("*  -------  *\n");
        printf("*************\n");

        if (y = 1){
            printf("Player one rolled a %d", x);
            x = *first_rollA;

        }
        if (y = 2) {
            printf("Player two rolled a %d", x);
            x = *first_rollB;
        }
    }
    if (x == 2) {
        int dice;

        printf("*************\n");
        printf("*  _____    *\n");
        printf("*      |    *\n");
        printf("*  ____|    *\n");
        printf("*  |        *\n");
        printf("*  |____    *\n");
        printf("*           *\n");
        printf("*************\n");

        if (y = 1) {
            printf("Player one rolled a %d", x);
            x = *first_rollA;
        }
        if (y = 2) {
            printf("Player two rolled a %d", x);
            x = *first_rollB;
        }
    }

    if (x == 3) {
        int dice;

        printf("*************\n");
        printf("*  -----    *\n");
        printf("*      |    *\n");
        printf("*   ___|    *\n");
        printf("*      |    *\n");
        printf("*      |    *\n");
        printf("*  -----    *\n");
        printf("*************\n");

        if (y = 1){
            printf("Player one rolled a %d", x);
            x = *first_rollA;
        }
        if (y = 2) {
            printf("Player two rolled a %d", x);
            x = *first_rollB;
        }
    }

    if (x == 4) {
        int dice;

        printf("*************\n");
        printf("*  |    |   *\n");
        printf("*  |    |   *\n");
        printf("*  |____|   *\n");
        printf("*       |   *\n");
        printf("*       |   *\n");
        printf("*       |   *\n");
        printf("*************\n*");

        if (y = 1) {
            printf("Player one rolled a %d", x);
            x = *first_rollA;
        }
        if (y = 2) {
            printf("Player two rolled a %d", x);
            x = *first_rollB;
        }
    }
    if (x == 5) {
        int dice;

        printf("*************\n");
        printf("*  _____    *\n");
        printf("*  |        *\n");
        printf("*  |____    *\n");
        printf("*       |   *\n");
        printf("*  _____|   *\n");
        printf("*           *\n");
        printf("*************\n");

        if (y = 1) {
            printf("Player one rolled a %d", x);
            x = *first_rollA;
        }
        if (y = 2) {
            printf("Player two rolled a %d", x);
            x = *first_rollB;
        }
    }

    if(x == 6) {
        int dice;

        printf("*************\n");
        printf("*  _____    *\n");
        printf("*  |        *\n");
        printf("*  |____    *\n");
        printf("*  |    |   *\n");
        printf("*  |____|   *\n");
        printf("*           *\n");
        printf("*************\n");

        if (y = 1) {
            printf("Player one rolled a %d", x);
            x = *first_rollA;
        }
        if (y = 2) {
            printf("Player two rolled a %d", x);
            x = *first_rollB;
        }
    }
}

}

在C语言中,必须先声明一个函数,然后才能使用它。编译器严格地从上到下读取源代码

因此,要么将整个first_roll_call函数移动到文件的顶部,要么在文件的顶部写入以下行

int first_roll_call(int x, int y, int *first_rollA, int *first_rollB);

此行声明函数,但将其定义留待以后使用。

在C中,必须先声明函数,然后才能使用它。编译器严格地从上到下读取源代码

因此,要么将整个first_roll_call函数移动到文件的顶部,要么在文件的顶部写入以下行

int first_roll_call(int x, int y, int *first_rollA, int *first_rollB);

这一行声明了函数,但将其定义留待以后使用。

编译器主要抱怨这一行:

它抱怨第一次点名不是一种功能是完全正确的。在前面,您将其声明为int类型的局部变量:

在main中,该声明会隐藏同名的任何其他对象。如果您想将其声明为返回int的函数,那么至少您需要:

    int first_roll_call();
实际上,您应该为函数声明一个完整的原型:

    int first_roll_call(int, int, int *, int *);
此外,尽管允许在其他函数中声明函数,但不允许嵌套函数体!,将函数声明放在源文件顶部附近的文件范围内要传统得多


然而,对于这样一个相当简单的情况,将函数main移动到源文件的末尾将消除它声明其他函数的任何需要。到main时,编译器已经看到了附加到其函数体的声明,这些声明就足够了。

编译器正在抱怨main中的这一行:

它抱怨第一次点名不是一种功能是完全正确的。在前面,您将其声明为int类型的局部变量:

在main中,该声明会隐藏同名的任何其他对象。如果您想将其声明为返回int的函数,那么至少您需要:

    int first_roll_call();
实际上,您应该为函数声明一个完整的原型:

    int first_roll_call(int, int, int *, int *);
此外,尽管允许在其他函数中声明函数,但不允许嵌套函数体!,将函数声明放在源文件顶部附近的文件范围内要传统得多


然而,对于这样一个相当简单的情况,将函数main移动到源文件的末尾将消除它声明其他函数的任何需要。到main时,编译器已经看到了附加到其函数体的声明,这些声明就足够了。

事实上,这是您通常看到的。您在上面声明了一个函数原型,并将函数定义放在代码末尾,以减少混乱并提高可读性。不,这并不完全正确。在C语言中,您可以在声明函数之前调用它,而在这种情况下,问题是由与函数同名的局部变量引起的,再加上嵌套错误,导致第一次调用被定义在dice_roll的定义中。事实上,这就是您通常看到的情况。您在上面声明了一个函数原型,并将函数定义放在代码末尾,以减少混乱并提高可读性。不,这并不完全正确。在C语言中,您可以在声明函数之前调用它,而这种情况下的问题是由与函数同名的局部变量引起的,再加上嵌套错误,导致在dice\u roll的定义中定义了第一个\u roll\u调用,int main void是main的定义,它肯定地表示您希望main没有参数。别误会我的意思,int main也很好,但是你也可以尽可能地使它正确,不要投malloc的回归,请参阅:以获得全面的解释。playerA=malloc100*sizeof*playerA;您只需要声明100 int当前您只声明25,每个int有4个字节-在x86和x86上\u 64请注意,有一个位置不正确的},导致第一个\u roll\u调用在dice\u roll的定义中定义,因此无法从该函数外部调用它。另外,相互之间的函数定义是GNUC扩展,在标准C中是不允许的。只有一个nit,int main void是main的定义,它肯定地向您传达了
他似乎没有争论。别误会我的意思,int main也很好,但是你也可以尽可能地使它正确,不要投malloc的回归,请参阅:以获得全面的解释。playerA=malloc100*sizeof*playerA;您只需要声明100 int当前您只声明25,每个int有4个字节-在x86和x86上\u 64请注意,有一个位置不正确的},导致第一个\u roll\u调用在dice\u roll的定义中定义,因此无法从该函数外部调用它。另外,相互之间的函数定义是GNUC扩展,在标准C中是不允许的。