1

マクロに対する私の理解はずれていると思います。私は curses を使用してゲームを作成しており、マップを生成したいと考えています (私が見つけた配布サンプラーをどれも動作させることができないため、現在はタイルを一様に選択しています)。

#include "Map.h"

/*  Our ingame tiles    */
#define WATER   Tile(COLOR_BLUE,COLOR_CYAN,std::string(1, static_cast<char>(247)));
#define LAVA    Tile(COLOR_YELLOW, COLOR_RED, std::string(1, static_cast<char>(247)));
#define ANIMAL  Tile(COLOR_MAGENTA, COLOR_BLACK, std::string(1, static_cast<char>(224)));
#define PATH    Tile(COLOR_WHITE, COLOR_WHITE, std::string(1, static_cast<char>(32)));

//static int pathPx = 5;
//static int lavaPx = 2;
//static int waterPx = 2;
//static int animalPx = 1;

std::vector<Tile> tiles = {PATH, LAVA, WATER, ANIMAL};

std::vector< std::vector<Tile> > map;


Map::Map(){
    srand(time(NULL));
    int y = rand() % 10 + 10; 
    int x = rand() % 10 + 10;
    for (int j=0; j<y; j++){
        std::vector<Tile> tileRowi;
        for (int i=0; i<x; i++){
            int n = rand()%4+1;
            tileRowi.push_back(tiles[n]);
        }
    }
}

エラーは次のとおりです。

   First: c:\mingw\bin\../lib/gcc/mingw32/4.6.2/include/c++/bits/basic_string.h   initializing argument 1 of 'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]' [-fpermissive] 

二つ目:invalid conversion from 'char' to 'const char*' [-fpermissive]

最初のものは私のファイルの1つの行485を示しています...しかし、行485はありません.2番目のものはオンです:

    std::vector<Tile> tiles = {PATH, LAVA, WATER, ANIMAL};

編集 -

ここに私のタイルクラスがあります:

 #include "Tile.h"


int backgroundColor;
int foregroundColor;
std::string rep;

Tile::Tile(int fc, int bc, std::string r){
    backgroundColor = bc;
    foregroundColor = fc;
    rep = r;
}

edit 2-- ワークスペースの写真 ここにエラーがあります

4

2 に答える 2

4

C++ は関数外での操作を許可していません。以下のコードを関数に入れます

tiles.push_back(WATER);
tiles.push_back(LAVA);
tiles.push_back(ANIMAL);
tiles.push_back(PATH);

Map.cpp:

void MakeTiles(std::vector<Tile>& tiles)
{
  tiles.push_back(WATER);
  tiles.push_back(LAVA);
  tiles.push_back(ANIMAL);
  tiles.push_back(PATH);
}

編集

Tile クラスを投稿していないので、最後に何が起こっているのかを推測する必要があります。Tile に std::string 型のメンバーがあり、char を使用して構築しているように見えます (Tile の 3 番目のパラメーターを参照)。可能な修正は次のとおりです。

  std::string(1, static_cast<char>(247));

また、マクロ;には最後に余分なものがあります

#define WATER   Tile(COLOR_BLUE,COLOR_CYAN,std::string(1, static_cast<char>(247)));
                                                                                  ^^^^

次のようにする必要があります。

#define WATER   Tile(COLOR_BLUE,COLOR_CYAN,std::string(1, static_cast<char>(247)))
于 2012-12-23T04:30:09.927 に答える
0

上記の投稿に同意します。push_back は行く方法です。しかし、これは代入演算子でベクトルをロードするマクロの方法です。乾杯 :)

#include <iostream>
#include <vector>

#define WHITE tiles white(1,'w') //messy ihmo
#define BLACK tiles black(-1,'b')

using namespace std;

class tiles
{
public:
tiles(int NUMBER, char LETTER):number(NUMBER), letter(LETTER){};
int number;
char letter;
};

int main()
{
WHITE; //macro overwrites here
BLACK;

vector<tiles> box; //initialize the vector
box.reserve(8); //must do this manually if you don't use stl push_back()
                //or get memory error, bounds issue.  push_back() is really the better way 
                //to go.
int i=0;
box[i++]=white;//load up the vector via the assignment operator 
box[i]=black;//same

cout<<"WHITE "<<box[0].letter<<" BLACK "<<box[1].letter<<endl;//check to screen
cout<<"WHITE "<<box[0].number<<" BLACK "<<box[1].number<<endl;

system("pause");
return 0;
}
于 2012-12-23T07:37:59.257 に答える