1

テキスト ファイルを使用して、2 次元ベクトルの初期化に使用される構造体を初期化しようとしています。はい、複雑であることはわかっていますが、最終的には多くのデータを処理する必要があります。問題は getline にあります。他のコードではこのように問題なく使用しましたが、何らかの理由でここでの動作を拒否しています。引数エラーとテンプレート エラーが発生し続けます。どんなヒントでも大歓迎です。

#include <fstream>
#include <string>
#include <vector>
#include <iostream>

using namespace std;

const int HORIZROOMS=10;
const int VERTROOMS=10;
const int MAXDESCRIPTIONS=20;
const int MAXEXITS=6;

struct theme
{
    string descriptions[MAXDESCRIPTIONS];
    string exits[MAXEXITS];
};

void getTheme();

int _tmain(int argc, _TCHAR* argv[])
{
    getTheme();
    vector<vector <room>> rooms(HORIZROOMS, vector<room>(VERTROOMS));
    for (int i=0; i<HORIZROOMS; i++)
    {
        for (int j=0; j<VERTROOMS; j++)
        {
            cout<<i<<" "<<j<<" "<<rooms[i][j].getRoomDescription()<<endl;
        }
    }
    return 0;
}

void getTheme()
{
    theme currentTheme;
    string temp;
    int numDescriptions;
    int numExits;
    ifstream themeFile("zombie.txt");
    getline(themeFile, numDescriptions, ',');
    for (int i=0; i<numDescriptions; i++)
    {
        getline(themeFile, temp, ',');
        currentTheme.descriptions[i]=temp;
    }
    getline(themeFile, numExits, ',');
    for (int i=0; i<numExits; i++)
    {
        getline(themeFile, temp, ',');
        currentTheme.exits[i]=temp;
    }
    themeFile.close();
}
4

1 に答える 1

2

std::getlineストリームから に抽出するために使用されstd::stringます。と に抽出するnumDescriptionsnumExits、実際に必要なのは ですoperator>>。例えば、

themeFile >> numDescriptions;

これにより、次の時点で抽出が自動的に停止します,std::getlineただし、次の抽出で表示したくない場合は、このコンマをスキップする必要があります。

themeFile.ignore();

または、std::string numDescriptionsStringwhich を使用して、それをwithstd::getline(themeFile, numDescriptionsString, ',')に変換することもできます。std::stringintstd::stoi

getline(themeFile, numDescriptionsString, ',');
numDescriptions = std::stoi(numDescriptionsString);

これはもっと醜いと思います。

于 2013-02-08T17:14:36.070 に答える