在'{'标记之前的表达 [英] Expression before '{' token

查看:49
本文介绍了在'{'标记之前的表达的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个小问题

代码之前

i have a small problem
before code

/*
 * CP143, Herman Kamper, 2018.
 */

#ifndef MAP_H_INCLUDED
#define MAP_H_INCLUDED

#define MAP_SIZE 12

enum MapEntryEnum {EMPTY, WALL, START, END};
typedef enum MapEntryEnum MapEntry;

struct PositionStruct
{
    int row;
    int col;
};
typedef struct PositionStruct Position;

#endif // MAP_H_INCLUDED



错误代码:


error code:

#define myMAP { {WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL}, {WALL,START,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,WALL,END,EMPTY,EMPTY,WALL}, {WALL,EMPTY,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,EMPTY,WALL}, {WALL,EMPTY,WALL,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,WALL,WALL,EMPTY,WALL}, {WALL,EMPTY,WALL,EMPTY,WALL,EMPTY,WALL,WALL,WALL,WALL,EMPTY,WALL}, {WALL,EMPTY,WALL,WALL,WALL,EMPTY,WALL,EMPTY,EMPTY,EMPTY,EMPTY,WALL}, {WALL,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,WALL,EMPTY,WALL,WALL,EMPTY,WALL}, {WALL,WALL,WALL,WALL,WALL,EMPTY,WALL,EMPTY,WALL,WALL,EMPTY,WALL}, {WALL,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,WALL,WALL,EMPTY,WALL}, {WALL,EMPTY,WALL,WALL,WALL,WALL,WALL,EMPTY,WALL,WALL,EMPTY,WALL}, {WALL,EMPTY,EMPTY,EMPTY,WALL,EMPTY,EMPTY,EMPTY,WALL,EMPTY,EMPTY,WALL}, {WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL} }



给出错误预期e '{'令牌帮助之前的xpression



我尝试过:



我尝试移动它并使用'='符号


gives error expected expression before '{' token help

What I have tried:

I have tried moving it and using the '=' sign

推荐答案

为了声明 #define 需要多行的宏,每个部分行必须以'\'结尾

如果没有,你的声明结束,你的代码的其余部分被编译为好像它是正常的代码。
In order to declare a #define macro that takes more than one line, each partial line must end with '\'
Without that, your declaration ends, and the remainder of your code is compiled as if it was meant to be "normal code".


宏定义看起来正确。但是你没有向我们展示周围的代码(例如如何定义 WALL 等等)。

以下程序:

The macro definition looks correct. However you don't show us the surrounding code (for instance how is WALL defined, and so on).
The following program:
#include <stdio.h>

#define WALL 1
#define EMPTY 2
#define START 3
#define END 4

#define ITEMS 12

#define myMAP { {WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL}, {WALL,START,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,WALL,END,EMPTY,EMPTY,WALL}, {WALL,EMPTY,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,EMPTY,WALL}, {WALL,EMPTY,WALL,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,WALL,WALL,EMPTY,WALL}, {WALL,EMPTY,WALL,EMPTY,WALL,EMPTY,WALL,WALL,WALL,WALL,EMPTY,WALL}, {WALL,EMPTY,WALL,WALL,WALL,EMPTY,WALL,EMPTY,EMPTY,EMPTY,EMPTY,WALL}, {WALL,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,WALL,EMPTY,WALL,WALL,EMPTY,WALL}, {WALL,WALL,WALL,WALL,WALL,EMPTY,WALL,EMPTY,WALL,WALL,EMPTY,WALL}, {WALL,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,WALL,WALL,EMPTY,WALL}, {WALL,EMPTY,WALL,WALL,WALL,WALL,WALL,EMPTY,WALL,WALL,EMPTY,WALL}, {WALL,EMPTY,EMPTY,EMPTY,WALL,EMPTY,EMPTY,EMPTY,WALL,EMPTY,EMPTY,WALL}, {WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL} }

int main()
{
  int map[][ITEMS] = myMAP;

  size_t m,n;

  for (n=0; n<sizeof(map)/sizeof(map[0]); ++n)
  {
    for (m=0; m<ITEMS; ++m)
      printf("%d ", map[m][n]);
    printf("\n");
  }
}



输出:


outputs:

1 1 1 1 1 1 1 1 1 1 1 1 
1 3 2 2 2 2 2 1 2 2 2 1 
1 2 1 1 1 1 2 1 2 1 2 1 
1 2 1 2 2 1 2 1 2 1 2 1 
1 2 1 2 1 1 2 1 2 1 1 1 
1 2 1 2 2 2 2 2 2 1 2 1 
1 2 1 2 1 1 1 1 2 1 2 1 
1 1 1 2 1 2 2 2 2 2 2 1 
1 4 1 1 1 2 1 1 1 1 1 1 
1 2 1 1 1 2 1 1 1 1 2 1 
1 2 2 2 2 2 2 2 2 2 2 1 
1 1 1 1 1 1 1 1 1 1 1 1 


实际上,myMap不必是一个宏。如果不是这样可能会更好,你可以用不同的方式填充数据。以下是Pallini先生代码的修订版本,当它不是宏时。
Actually, myMap doesn't have to be a macro. It might be better if it wasn't so you could fill the data in different ways. Here is a revised version of Mr. Pallini's code when it is not a macro.
enum MapTypes
{
    WALL = 1,
    EMPTY,
    START,
    END
};

const int ITEMS = 12;

typedef MapTypes	maprow[ITEMS];

maprow MyMap[] =
{
	{ WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL },
	{ WALL,START,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,WALL,END,EMPTY,EMPTY,WALL },
	{ WALL,EMPTY,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,EMPTY,WALL },
	{ WALL,EMPTY,WALL,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,WALL,WALL,EMPTY,WALL },
	{ WALL,EMPTY,WALL,EMPTY,WALL,EMPTY,WALL,WALL,WALL,WALL,EMPTY,WALL },
	{ WALL,EMPTY,WALL,WALL,WALL,EMPTY,WALL,EMPTY,EMPTY,EMPTY,EMPTY,WALL },
	{ WALL,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,WALL,EMPTY,WALL,WALL,EMPTY,WALL },
	{ WALL,WALL,WALL,WALL,WALL,EMPTY,WALL,EMPTY,WALL,WALL,EMPTY,WALL },
	{ WALL,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,EMPTY,WALL,WALL,EMPTY,WALL },
	{ WALL,EMPTY,WALL,WALL,WALL,WALL,WALL,EMPTY,WALL,WALL,EMPTY,WALL },
	{ WALL,EMPTY,EMPTY,EMPTY,WALL,EMPTY,EMPTY,EMPTY,WALL,EMPTY,EMPTY,WALL },
	{ WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL,WALL }
};

void DoMapTest()
{
	TCHAR buffer[32] = { 0 };
	size_t m, n;
	size_t rows = sizeof( MyMap ) / sizeof( MyMap[0] );
	for( n = 0; n < rows; ++n )
	{
		buffer[0] = 0;
		for( m = 0; m < ITEMS; ++m )
		{
			switch( MyMap[n][m] )
			{
			case WALL :  _tcscat( buffer, _T( "*" ) ); break;
			case EMPTY : _tcscat( buffer, _T( " " ) ); break;
			case START : _tcscat( buffer, _T( "s" ) ); break;
			case END :   _tcscat( buffer, _T( "e" ) ); break;
			}
		}
		_tprintf( _T( "%2d: %s\n" ), n + 1, buffer );
	}
}

及其输出:

 1: ************
 2: *s     *e  *
 3: * ******** *
 4: * *     ** *
 5: * * * **** *
 6: * *** *    *
 7: *     * ** *
 8: ***** * ** *
 9: *       ** *
10: * ***** ** *
11: *   *   *  *
12: ************

如果你想要,这将在Unicode模式下工作它来。

This will work in Unicode mode if you want it to.


这篇关于在'{'标记之前的表达的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆