2016-10-03 9 views
0

int型とdouble型の2つのデータ型を持つ "obj"というクラスがあります。 Imは3番目のオブジェクトを読み込もうとしていますが、それはわかりません。データ型のいずれかをdoubleに変更する前に動作していました。私は型キャストと関係があるように感じます。要約すると、私はそれがファイルがwrritenされた後に3番目のオブジェクトだけを出力することができません。助言がありますか?バイナリファイルで書かれたdoubleを出力するC++

#include<iostream> 
#include<fstream> 

using namespace std; 

class Data { 

public: 
    int num1; 
    double num2; 

    Data() {} 
    ~Data() {} 
    void setData(); 
    void getData(); 
}; 

void Data::getData() 
{ 
    cout << "Enter first number: "; 
    cin >> num1; 

    cout << "Eneter second number: "; 
    cin >> num2; 

} 









#include "class.h" 


    const int SIZE = 5; 
    int main() 
    { 

     Data obj[SIZE]; 

     for (int i = 0; i < SIZE; i++) 
     { 
      cout << "Enter numbers of object " << i+1 << endl; 

      obj[i].getData(); 

     } 


     ofstream outFile; 
     outFile.open("C:\\Users\\juan\\Desktop\\26.bin", ios::out | ios::binary); 

     for (int i = 0; i < SIZE; i++) 
     { 

      outFile.write(reinterpret_cast<char *> (&obj[i].num1), sizeof(obj[i].num1)); 
      outFile.write(reinterpret_cast<char *> (&obj[i].num2), sizeof(obj[i].num2)); 

     } 

     cout << "Writing to file...." << endl; 

     outFile.close(); 

     ifstream inFile; 
     inFile.open("C:\\Users\\juan\\Desktop\\26.bin", ios::in | ios::binary); 

     for (int i = 0; i < SIZE; i++) 
     { 
      inFile.read(reinterpret_cast<char *> (&obj[i].num1), sizeof(obj[i].num1)); 
      inFile.read(reinterpret_cast<char *> (&obj[i].num2), sizeof(obj[i].num2)); 



     } 

     for (int i = 0; i < SIZE; i++) 
     { 
      cout << obj[i].num1 << endl; 
      cout << obj[i].num2 << endl; 
      cout << endl << endl; 
     } 

     inFile.close(); 

     Data third; 
     fstream seekfile; 


     seekfile.open("C:\\Users\\juan\\Desktop\\26.bin", ios::in | ios::binary); 

     seekfile.seekg(2 * sizeof(Data), ios::beg); 

     seekfile.read(reinterpret_cast<char *> (&third.num1), sizeof(third.num1)); 
     seekfile.read(reinterpret_cast<char *> (&third.num2), sizeof(third.num2)); 

     cout << endl << endl; 
     cout << third.num1 << endl; 
     cout << third.num2 << endl; 

     seekfile.close(); 





    } 
+0

提案:1)動作していないものを正確にお知らせください。それはコンパイルエラー、ランタイムエラーまたは予期しない結果ですか? 2)「どんな提案?」よりも良い質問をする。 – user463035818

+0

それは、私が信じているものを私に与えるだけの第3のオブジェクトを出力しないことは、メモリ空間です – juanmindset

+0

'データ 'の定義は何ですか? – Peter

答えて

0

問題はsizeof(Data)は、このようにseekfile.seekg(2 * sizeof(Data), ios::beg)が間違っているsizeof(int) + sizeof(double)の合計はないということです。この

seekfile.seekg(2 * (sizeof(third.num1) + sizeof(third.num2)) 

この問題を修正する必要があります。

sizeof(Data)は、パディングによるコンポーネントの合計よりも大きいことに注意してください。詳細はこれを参照してください。

Why isn't sizeof for a struct equal to the sum of sizeof of each member?

はまた、あなたがintnum2を再定義する場合は、あなたの元のコードの作品パディングのためにその場合の必要がないことに注意してください。