0

.txtファイルというファイルからデータを読み取ろうとしたのは初めてでした。以下は私のコードです:

Level::ReadStream(std::fstream data)
{
bool write = false;
char* p = data.tellg();

while(!data.eof())
{
    int i = 0, j = 0;

    if(&p == '[')
    {
        write == true;
    }

    if(write == true)
    {
        mapX[i] = p;
        mapY[j] = p;
    }

    if(&p == '/n')
    {
        i++;
        j++;
    }

    else
    {
        i++;
    }

    *p++
}
};

void Level::SetMapSize(std::fstream data)
{
int* p = data.tellg();
int sizeX = 0;
int sizeY = 0;

while(!data.eof())
{
    if(&p != '[' && &p != ']' && &p != '\n')
    {
        sizeX++;
    }

    else if(&p != '\n')
    {
        sizeY++;
    }
}

mapX.resize(sizeX);
mapY.resize(sizeY);

std::cout << sizeX << '\n' << sizeY;
};

これらの2つの関数の目的は、次のとおりです。1-ファイル内のすべての文字を読み取り、現在の文字が角かっこでない場合は、それをインデックスマップ(X、Y)に追加し、カウンターを増やして次の非角かっこ値は正しいインデックスに入れられます。

2-すべてのファイルを読み取り、前と同じように、ブラケット以外の値をカウントして、mapXとmapYを正しいサイズにすることができます。

ただし、機能しておらず、次のエラーが発生しました。

 C:\...\Level.cpp|58|warning: multi-character character constant|

 c:\...\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\bits\ios_base.h|790|error: 'std::ios_base::ios_base(const std::ios_base&)' is private|

 c:\...\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|47|error: within this context|

 c:...\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|87|note: synthesized method 'std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)' first required here |

 c:...\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\streambuf|770|error: 'std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]' is private|

 c:...\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|78|error: within this context|

 c:...\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\iosfwd|87|note: synthesized method 'std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&)' first required here |

C:...\Level.cpp||In constructor 'Level::Level()':|

C:...\Level.cpp|24|note: synthesized method 'std::basic_fstream<char, std::char_traits<char> >::basic_fstream(const std::basic_fstream<char, std::char_traits<char> >&)' first required here |

C:...\Level.cpp|24|error:   initializing argument 1 of 'void Level::SetMapSize(std::fstream)'|

C:...\Level.cpp|29|error: 'cout' was not declared in this scope|

C:...\Level.cpp|38|error: ISO C++ forbids declaration of 'ReadStream' with no type|

C:...\Level.cpp|38|error: prototype for 'int Level::ReadStream(std::fstream)' does not match any in class 'Level'|

C :...\Level.cpp|17|error: candidate is: void Level::ReadStream(std::fstream)|
C:...\Level.cpp||In member function 'void Level::SetMapSize(std::fstream)':|
C:...\Level.cpp|75|error: invalid conversion from 'std::streamoff' to 'int*'|
C:...\Level.cpp|81|error: ISO C++ forbids comparison between pointer and integer|
C:...\Level.cpp|81|error: ISO C++ forbids comparison between pointer and integer|
C:...\Level.cpp|81|error: ISO C++ forbids comparison between pointer and integer|
C:...\Level.cpp|86|error: ISO C++ forbids comparison between pointer and integer|
C:...\Level.cpp|95|error: 'cout' is not a member of 'std'|
||=== Build finished: 15 errors, 1 warnings ===|

誰か助けてもらえますか?

編集:わかりました、私はすべてを変更しました。私の新しいコードは次のとおりです。

void Level::ReadStream()
{
long p = textData.tellg();
int counter = 0;
int i = 0;
int j = 0;
char ch;

while(p != textData.eof())
{
    textData.seekg(counter);
    textData >> ch;

    if(ch != '[' && ch != ']')
    {
        mapX[i] = ch;
        mapY[j] = ch;

        i++;

        if(ch == '\n')
        {
            i = 0;
            j++;
        }
    }

    counter++;
    p = textData.tellg();
}
};

mapXとmapYの長さは5intです。これでコンパイルされますが、ハングしてクラッシュします。理由がわかりません...私を助けてくれる人はいますか?

4

1 に答える 1

4

そうで\nはありません/n!これでいくつかのエラーがクリアされるはずです。

また、ポインタを取得することはできません。ポインタtellgは位置を返しますが、位置へのポインタは返しません。

基本的に、C ++のIOについて調べてみてください。おそらく、次の質問から始めてください。

C ++でcharごとにファイルから読み取る方法は?

于 2012-04-05T16:20:13.533 に答える