-1

私は、学校の友人グループと C で単純な 2D ゲーム エンジンを作成している最中です。クラスとして、関数ポインタをメソッドとして使用するなどして、このエンジンをオブジェクト指向の方法で記述したいと考えてstructsいます。標準の OOP 構文をエミュレートするcreate()ために、オブジェクトにメモリ内の領域を割り当てる関数を作成しました。現在テスト中ですが、エラーが発生しています。テストに使用している2つのファイルのコードは次のとおりです。

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;
}

ユーティリティ.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最初に私と関係があること、そしておそらく適切な構文を使用していないことを知っています。しかし、その適切な構文が何であるかはわかりません。誰でも助けることができますか?

4

2 に答える 2

1

あなたのコードはこの分野では意味がありません

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

Class型名です。に引数として渡そうとするのはなぜcreateですか? C では、型名を関数の引数として使用できません。

あなたのcreate関数は、引数としてある種のポインターを期待しているようです。そのポインターの目的は私にはまったくわかりませんが、ここでの結論は、ここでは型名Classを引数として使用できないということです。

内部では、割り当てるメモリの量としてcreate使用します。sizeof(class)これsizeof(class)は単純にポインターのサイズに評価されますが、これは絶対に必要なものではありません。

基本的に、何をしようとしているのかを再考し、ゼロから行う必要があります。最初にCの本を読むことをお勧めします。あなたが今持っているものはただ... ランダムです。

于 2012-10-22T20:57:40.403 に答える
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));
于 2012-10-22T20:56:45.483 に答える