初めまして、Cの組込みが解る程度の初心者です。
以下のLuaプログラムがエラーが出て困っています。

struct SIteminfo{
       char name[100];
       int  price;
}

typedf struct SIteminfo ItemInfo;

このpriceに引数in型が配列されプログラム中に呼び出しているのですが、
型がintでないとエラーがでます。

ソース:

#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>

int GetSelection(const char *title){

    char input[100];

    printf("%s >",title);

    fgets(input, sizeof(input), stdin);
    printf("\n");

    if(strlen(input)==0 || !isdigit(input[0])){
        return -1;
    }
        return atoi(input);
}

struct SItemInfo{
    char name[100];
    int price;
};

typedef struct SItemInfo ItemInfo;

#define MAX_SHOP_ITEMS 5

ItemInfo shop_items[MAX_SHOP_ITEMS] = {
    {"yakusou",100},
    {"konbou",1000},
    {"nunonohuku",2000},
    {"",-1},
    {"",-1},
};

const char* GetItemName( int index){
    if(( index < 0 ) || (index>= MAX_SHOP_ITEMS)){
        return NULL;
    }
        return shop_items[index].name;
};

const int* GetItemPrice( int index){
    if(( index < 0 ) || (index>= MAX_SHOP_ITEMS)){
        return NULL;
    }
        return shop_items[index].price;
};


void PrintStackItem(lua_State *L, int idx){
    int type = lua_type(L,idx);
    switch(type){
    case LUA_TSTRING:
    //
    printf("index %2d : type=%s : %s \n",idx, lua_typename(L,type),lua_tostring(L,idx));
    break;
    case LUA_TNUMBER:
    //
    printf("index %2d : type=%s : %f\n",idx, lua_typename(L,type),lua_tonumber(L,idx));
    break;
    case LUA_TBOOLEAN:
    //          
    printf("index %2d : type=%s : %s \n",idx, lua_typename(L,type),lua_toboolean(L,idx) ? "true" :"false");
    break;
    defalut:
    printf("index %2d : type=%s \n",idx, lua_typename(L,type));
    break;
    }
}           

void PrintStack(lua_State *L){

    printf("----- stack -------\n");
    int top = lua_gettop(L);
    //
    for(int i=top; i>=1; i--){
        PrintStackItem(L,i);
    }
    printf("----- ----- -------\n");
    //
    for(int i=-1; i>=-top; i--){
        PrintStackItem(L,i);
    }
    printf("----- ----- -------\n");

}

int GetItemNameGlue(lua_State *L){
//  printf("GetItemName() 関数実行\n");
    //スタックを表示
    PrintStack(L);
    //
    int index = (int)lua_tonumber(L,1);
    //
    const char *name =GetItemName(index);
    //
    lua_settop(L, 0);
    //
    lua_pushstring(L, name);
    //
    PrintStack(L);

    return 1;

}

int GetItemPriceGlue(lua_State *L){
//  printf("GetItemName() 関数実行\n");
    //スタックを表示
    PrintStack(L);
    //
    int index = (int)lua_tonumber(L,1);
    //
    const int *price =GetItemPrice(index);
    //
    lua_settop(L, 0);‬
    //
    lua_pushvalue(L, price);
    //
    PrintStack(L);

    return 1;

}



static int s_money = 0;

static void Shop(){

    printf("いらっしゃいませ[MAC TOOL]へようこそ!\n");

    while(true){
        printf("何にするかい?\n");
        printf("(所持金 : %d 円)\n",s_money);

        for(int i=0; i < MAX_SHOP_ITEMS; i++){
            ItemInfo *item = &shop_items[i];
            if(item->price == -1) continue;
                printf("%2d. %-10s %6d円\n", i+1, item->name, item->price);
        }
        printf(" 0. 帰る\n");
        int num = GetSelection("どうする?");
        //0 -> 帰る。
        if(num ==0) break;
        //異常値
        if((num < 0)|| ( num > MAX_SHOP_ITEMS ) || (shop_items[num-1].price == -1)){
            printf("えっ?何だって?\n");
            continue;
        }
        // 選択したアイテムの情報
        ItemInfo *item = &shop_items[num -1];
        // 所持金チェック
        if(s_money< item->price){
            //お金が足らない
            printf("%sだね。 っでもお金が、 %d 円、足らないみたいだね。またおいで。\n",item->name, item->price -  s_money );
            continue;
        }
        //購入成功
        printf("%sだね。じゃあ %d 円いただくよ。 \n\n",item->name, item->price);
           s_money = s_money - item->price;
    }

    printf("また、いらっしゃい !! \n");

}

int GetSelectionGlue(lua_State *L){
    //
    const char *title = lua_tostring(L,1);
    //
    int index = GetSelection(title);
    //
    lua_settop(L, 0);
    //
    lua_pushnumber(L, index);

    return 1;
}


int GetMoney(){
    return s_money;
}


void SetMoney(int money){
    s_money = money;
}

int GetMoneyGlue(lua_State *L){
    //
    int money = GetMoney();
    //
    lua_settop(L,0);
    //
    lua_pushnumber(L,money);
    return 1;
}

int SetMoneyGlue(lua_State *L){
    //
    int index = (int)lua_tonumber(L,1);
    //
    SetMoney(index);
    //
    lua_settop(L,0);
    return 0;
}




int main(int argc, char* argv[]){
    //乱数初期化
    srand((unsigned int)time(NULL));
    for(int i=0; i<100; i++) rand();

    //LuaのVMを生成する。
    lua_State *L = lua_open();

    //LUaの標準ライブラリを開く
    luaL_openlibs(L);

    //
    lua_pushnumber(L, MAX_SHOP_ITEMS);
    lua_setglobal(L, "MAX_SHOP_ITEMS"   );
    //
    lua_register(L, "GetItemName", GetItemNameGlue); 

    lua_register(L, "GetMoney", GetMoneyGlue); 
    lua_register(L, "SetMoney", SetMoneyGlue); 



    //Luaスクリプトで文字を表示する。
//  int ret = luaL_dostring(L,"print('商品は'..GetItemName(0)..'です!')");   
    int top = lua_gettop(L);//
    int ret = luaL_dofile(L,"douguya.lua"); 

    if(ret!=0){
        printf("error:%s\n",lua_tostring(L,-1));
        lua_pop(L,1);
    }   
    lua_settop(L, top);


    //所持金決定
//  s_money = (rand()*10000 / RAND_MAX) + 500;
    s_money = (rand()*100 ) + 500;

    if(s_money<0){
        s_money=s_money*-1;
    }
    //道具屋開始
    while(true){
        Shop();
        getchar();
    }
    lua_close(L);

    return 0;

}

douguya.lua:

print('商品は、'..GetItemName(0)..'だよ!')
print('商品は、'..GetItemPrice(0)..'だよ!')

エラーログ:

gcc -I/usr/include/lua5.2 -o test2 test2_1.cpp -llua5.2 -lm
test2_1.cpp:123:2: error: stray ‘\342’ in program
  lua_settop(L, 0);‬
  ^
test2_1.cpp:123:2: error: stray ‘\200’ in program
test2_1.cpp:123:2: error: stray ‘\254’ in program
test2_1.cpp: In function ‘const int* GetItemPrice(int)’:
test2_1.cpp:53:28: error: invalid conversion from ‘int’ to ‘const int*’ [-fpermissive]
   return shop_items[index].price;
                            ^
test2_1.cpp: In function ‘int GetItemPriceGlue(lua_State*)’:
test2_1.cpp:125:24: error: invalid conversion from ‘const int*’ to ‘int’ [-fpermissive]
  lua_pushvalue(L, price);
                        ^
In file included from test2_1.cpp:1:0:
/usr/include/lua5.2/lua.h:147:16: note: initializing argument 2 of ‘void lua_pushvalue(lua_State*, int)’
 LUA_API void  (lua_pushvalue) (lua_State *L, int idx);
                ^
test2_1.cpp: In function ‘int main(int, char**)’:
test2_1.cpp:228:26: error: ‘lua_open’ was not declared in this scope
  lua_State *L = lua_open();

初心者なんで、何かと間違いがあると思いますが、
ご回答の程、よろしくお願いします