2017-03-21 16 views
-3

イムかなり新しい、まだ「現在の関数の境界を見つけることができない」 - そう、私を許してください私のコードは(まだ改善するために、任意の提案に開いてイム;)まだ完璧ではない場合)C++エラー:++プログラミングcの

Iをこのコードを実行する際に問題があります(大きなプロジェクトの一部のみ)。

int stock::import(string file){ 
ifstream input; 
input.open(file.c_str()); 


input.ignore(100000, '\n'); 

while(!input.eof()){ 
    int y = 0; 
    int m = 0; 
    int d = 0; 
    string year; 
    string month; 
    string day; 
    string open; 
    string high; 
    string low; 
    string close; 
    string volume; 
    string adj; 


    { 
     getline(input, year, '-'); 
     y = atoi(year.c_str()); 
    } 
    { 
     getline(input, month, '-'); 
     m = atoi(month.c_str()); 
    } 
    { 
     getline(input, day, ','); 
     d = atoi(day.c_str()); 
    } 



    int index = findplace(y, m, d); 


    values[index].year = y; 
    values[index].month = m; 
    values[index].day = d; 

    { 
     getline(input, open, ','); 
     values[index].open = open; 
    } 


    { 
     getline(input, high, ','); 
     values[index].high = high; 
    } 

    { 
     getline(input, low, ','); 
     values[index].low = low; 
    } 

    { 
     getline(input, close, ','); 
     values[index].close = close; 
    } 

    { 
     getline(input, volume, ','); 
     values[index].volume = volume; 
    } 

    { 
     getline(input, adj, '\n'); 
     values[index].adj = adj; 
    } 



} 

return 0;} 

プロジェクトは正常にコンパイルされますが、関数 "import"が呼び出されるとすぐにプログラムがクラッシュします。デバッガは、エラーコードのこの部分では、「現在の関数のバインド見つけることができない」と私に戻っています:

{ 
     getline(input, open, ','); 
     values[index].open = open; 
} 

奇妙なことは、私はこのコードの一部を削除する場合に、次のとおりです。

{ 
     getline(input, year, '-'); 
     y = atoi(year.c_str()); 
} 

私のプログラマーがうまく動作するクリティカルセクションのいくつかの行(クラッシュしないことを意味するが、もちろんそれはやるべきことをしない)。

現在CodeBlocksをIDEとして認識していません。

誰もがこれを手伝ってくれますか?ここで示唆したように、私はすでに...

を私が知っているすべてのものを試してみたように私は)値とfindplace(詳細情報である今では本当に必死だ:

class stock{ 
    private: 
    string name = ""; 
    string code = ""; 
    string number = ""; 
    stock* next = NULL; 
    int findplace(int year, int month, int day); 

    public: 
    day* values = new day[30]; 
    stock(string c); 
    string getindex(); 
    void setnext(stock* n); 
    stock* getnext(); 
    int import(string file); 

}; 

ので、基本的には[]ちょうど配列である値クラスからオブジェクトへのポインタの「日」 クラス「日」は次のようになります。

class day{ 
      public: 
       int year = 0; 
       int month = 0; 
       int day = 0; 
       string open; 
       string high; 
       string low; 
       string close; 
       string volume; 
       string adj; 
}; 

と関数findplace(中)配列が日付でソートされるように、私は疲れて、配列に新しい一日を挿入します常に最新の日を保持し、最も古いwを破棄しますhenは新しいものを挿入します。

int stock::findplace(int year, int month, int day){ 
int j = 29; 
for(j; values[j].year > year; j--){ 

} 
for(j; values[j].month > month; j--){ 

} 
for(j; values[j].day > day; j--){ 

} 
if(!(values[j].year == year && values[j].month == month && values[j].day == day)){ 
    delete &values[0]; 
    for(int i = 0; i < j; i++){ 
     values[i] = values[i+1]; 
    } 
} 
return j; 

}

+6

重要ではない重要な部分を除外して、多くのコードを提供しました。 [MCVE]の制作については、このリンクをお読みください。特に、 'values'変数の詳細を知らなくても、あなたを助けるのは難しいです。 –

+1

'while(!input.eof()){' [なぜ、feof-file-always-wrong](http://stackoverflow.com/questions/5431941/why-is-while-feof-file) -always-wrong) – synchronizer

+2

あなたは決してエラーをチェックしません.... – SingerOfTheFall

答えて

0

年/ Y月/ M日/ Dの値を印刷してみてください:それはこのようになります。 私は何とかあなたの入力ファイルからこれらの値を誤って読み込んでおり、値配列の範囲外インデックスを生成していると仮定します。