0

配列のサイズを変更してそこに値をコピーする必要があります...動的配列が必要であることはわかっていますが、vector静的配列は使用できず、使用する必要があります..次のようなものを書きました:

string names1[0];

bool foo(const char * inFile1) {
int size = 0;
ifstream myfile(inFile1);
if (myfile.is_open()) {
    // iterate through lines
    while (getline(myfile, line)) {            
        string tmp[++size];
        for (int i=0; i!=size;i++)     
            tmp[i]=names1[i];
        names1=tmp;
        names1[size]=line;
    }
}
}

それにもかかわらず、オンラインnames1=tmp; で私は得る

main.cpp:42:20: エラー: 'std::string [(((unsigned int)(((int)(++ size)) + -0x000000001)) + 1)]' の代入に互換性のない型があります ' std::文字列 [0]'

...私はC++を初めて使用し、javaguyとして本当に混乱しています:-Sアドバイスをありがとう、これを解決する方法..

4

1 に答える 1

2

変数names1はゼロ エントリを含む配列であり (それ自体が問題です)、その変数に 1 つの文字列を割り当てようとします。文字列配列が文字列と等しくないため、これは機能しません。

まず、std::vectorサイズがゼロの配列の代わりに使用することをお勧めします。

続行するには、1 文字ずつ一時変数にコピーする必要はありません。読み取った文字列をベクターに追加するだけです。

std::vector<std::string> names1;

// ...

while (std::getline(myfile, line))
    names1.push_back(line);

使用できない場合は、ゼロ以上のエントリstd::vectorを持つ適切な配列を割り当てる必要があります。それを超えると、配列のサイズを増やすためにそれを再割り当てする必要があります。

何かのようなもの:

size_t current_size = 1;
std::string* names1 = new std::string[current_size];

size_t line_counter = 0;
std::string line;
while (std::getline(myfile, line))
{
    if (line_counter > current_size)
    {
        std::string* new_names1 = new std::string[current_size * 2];
        std::copy(names1, names1 + current_size, new_names1);
        delete[] names1;
        names1 = new_names1;
        current_size *= 2;
    }
    else
    {
        names1[line_counter++] = line;
    }
}
于 2013-03-16T21:59:26.310 に答える