使用结构时接收“预期表达式”错误

时间:2012-10-22 20:54:19

标签: c

我正在与C群中的一群朋友在C中创建一个简单的2D游戏引擎。我想以面向对象的方式编写这个引擎,使用structs作为类,函数指针作为方法等。为了模拟标准OOP语法,我创建了一个create()函数,它在对象的内存。我正在测试它,我收到一个错误。这是我用于测试的两个文件的代码:

test.c的:

#include <stdio.h>

int main()
{
        typedef struct
        {
                int i;
        } Class;

        Class *test = (Class*) create(Class);
        test->i = 1;

        printf("The value of \"test\" is: %i\n", test->i);

        return 0;
}

utils.c:

#include <stdio.h>
#include <stdlib.h>
#include "utils.h"

void* create(const void* class)
{
        void *obj = (void*) malloc(sizeof(class));
        if (obj == 0)
        {
                printf("Error allocating memory.\n");
                return (int*) -1;
        }
        else {
                return obj;
        }
}

void destroy(void* object)
{
        free(object);
}

utils.h文件只保存create()destroy()函数的原型。

当我执行gcc test.c utils.c -o test时,我收到此错误消息:

test.c: In function 'main':
test.c:10:32: error: expected expression before 'Class'

我知道它在开始时与我的typedef有关,以及我可能没有使用正确的语法。但我不知道正确的语法是什么。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

你的代码在这方面毫无意义

Class *test = (Class*) create(Class);

Class是类型名称。你为什么要把它作为create的参数传递给你?您不能将类型名称用作C中的函数参数。

你的create函数似乎期望某种指针作为参数。该指针的目的对我来说完全不清楚,但这里的底线是类型名称Class不能在这里用作参数。

create内,您使用sizeof(class)作为要分配的内存量。这个sizeof(class)只会评估指针大小,这绝对不是你需要的。

基本上,你需要重新思考你想要做的事情并从头开始。我建议先在C上阅读这本书。你现在拥有的只是......随意。

答案 1 :(得分:0)

这一行:

Class *test = (Class*) create(Class);

不应该是

Class *test = (Class*) create(sizeof(Class));

代替?

请注意class是反向C ++关键字:

void* create(const void* class)

修改 你应该是:

void* create(unsigned sz)
{
        void *obj = (void*) malloc(sz);
        if (obj == 0)
        {
                printf("Error allocating memory.\n");
        }
        return obj;
}

void destroy(void* obj)
{
        free(obj);
}

用法:

  Class *test = (Class*) create(sizeof(Class));