3

C の構造について簡単な質問があります。

私はこの構造体とこの関数を持っています:

struct Vec2
{
  int x;
  int y;
}

void draw(Sprite* sprite, struct Vec2 pos);

とにかくc ++で同等のことをすることはありますか?

draw(foo, new Vec2(10, 20));

私はこれを試しましたが、コンパイラは私に同意しません:

draw(foo, {10, 20} );

誰か助けて?

編集: Visual C++ 2008 Express を C++ モードで使用していますが、私の学校では、C++ ではなくストレート C でコーディングする必要があります。

4

3 に答える 3

5

コンパイラがC99以降をサポートしている場合は、複合リテラルを使用できます。

draw(foo, (struct Vec2){10, 20});

または、メンバー名についてより明確にしたい場合は、次のようにします。

draw(foo, (struct Vec2){.x = 10, .y = 20});

(MicrosoftのCコンパイラはC99をサポートしていないため、コードの移植性が制限される可能性があることに注意してください。)

于 2013-03-19T18:43:45.703 に答える
2

私が通常行うことは次のとおりです。

struct Vec2 make_Vec2( int x, int y ) {
  struct Vec2 vec;
  vec.x = x; vec.y = y;
  return vec;
}

...
draw( foo, make_Vec2( 10, 20 ) );
于 2013-03-19T18:46:26.700 に答える
1

@Keith Thompsonの回答で実際の例を追加するだけです:

#include <stdio.h>
#include<string.h>
struct two{
 int x;
 int y;
};
draw(struct two t){
    printf("\nx=%d y=%d\n", t.x, t.y);
}
int main(){
 draw((struct two){1,2});
 draw((struct two){.y = 1, .x = 2});
} 

出力:

:~$ ./a.out 

 x=1 y=2

 x=2 y=1
于 2013-03-19T18:50:42.660 に答える