2017-04-01 7 views
0

編集:この質問は編集することをお控えください。あなたの時間を無駄にしないでください!ありがとうございますプライベートヘッダファイルのデータファイル処理関数を作成するには? (編集する)

私はHigh School Turbo C++をやっています。私はバイナリファイルを検索する関数を含むヘッダファイルを作ろうとしました。 マイHEADERFILEプログラムは次のとおりです。

#ifndef ALPHA_H 
#define ALPHA_H 

#if !defined __FSTREAM_H 
#include<fstream.h> 
#endif 

#if !defined __PROCESS_H 
#include<process.h> 
#endif 

void searchclass(char* & buf, int, char *); 

#endif 

alpha.h私はインターネット上でやったいくつかの研究によると、私は定義がメインのヘッダファイルではない別のプログラムに行くことが分かりました。私は、私はいくつかの特定のint型のためのクラスの形式でレコードを格納し、ランダムなバイナリファイルを検索することができます関数を記述しようとしているALPHA.CPP

#include<process.h> 
#include<fstream.h> 
#include"alpha.h" 

//All the Definations of the alpha.h header file go here 

void searchclass(char* & buf, int s_var, char * file) 
{ 
    ifstream fin; 
    fin.open(file, ios::binary); 
    if(!fin) 
    { 
    cout<<"Error 404: File not found"; 
    exit(-1); 
    } 
    while(!fin.read((char*)buf, sizeof(buf))) 
    if(buf.getint()==s_var) 
     cout<<"\n\nRecord Found!"; 
     buf.show(); 
    fin.close(); 
} 

に注意してください:これは、そのプログラムがあります変数。だから、どのクラスのオブジェクトでも取り込み、その中で検索を実行できるはずです。

これは私のヘッダファイルをチェックするために書いたプログラムです。 (プログラム上)A_TEST.CPPをコンパイルするにはA_TEST.CPP

#include<iostream.h> 
#include<conio.h> 
#include<fstream.h> 
#include"alpha.h" 
#include<string.h> 

class stu 
{ int rn; 
    char name[20]; 
public: 
void show() //Display Function 
{ 
    cout<<"\n\tStudent Details:"; 
    cout<<"\nName: "<<name; 
    cout<<"\nRoll No.: "<<rn; 
} 
stu()  //constructor 
{ 
    rn = 6; 
    strcpy(name,"Random Name"); 
} 
int getint()   //return function 
{ 
    return rn; 
} 
}; 

char* returnfile() 
{ char file[10]; 
    strcpy(file,"file.dat"); 
    return file; 
} 

void main() 
{ 
    clrscr(); 
    int search_var=6; 
    stu S1; 
    char file[10]; 
    strcpy(file, "test.dat"); 
    ofstream fout; 
    fout.open(file, ios::binary); 
    fout.write((char*)&S1, sizeof(S1)); 
    fout.close(); 

    searchclass((char*)& S1, search_var, file); 

    getch(); 
} 

、私は警告を取得:リンクについて

Warning A_TEST.CPP 45: Temporary used for parameter 'buf' in call to 'searchclass(char * &,int,char *)'

を、それは私に、このエラーを与える:

Linking A_TEST.EXE

Linker Error: Undefined symbol searchclass(char nearnear&,int,char near) in module A_TEST.CPP

私はALPHA.CPPファイルがalpha.hファイルにリンクしているとは思わない、私はALPHA.CPPファイルをコンパイルする場合、それは私に次のエラーを与える:

Error ALPHA.CPP 17: Structure required on left side of . or .*

Error ALPHA.CPP 19: Structure required on left side of . or .*

Warning ALPHA.CPP 21: Parameter 's_var' is never used

答えて

0

ALPHA.CPP 17と19では、int型はgetint()やshow()メソッドを持たないため、このようなコードを書くことはできません。バッファ内のintをチェックする場合は、まずポインタを "int *"に変換してください。以下のコードを試してください。

int count = fin.read((char*)buf, sizeof(buf)); 
for (int i = 0; i<(count-4); ++i) { 
    if (*(int *)(buf + i) == s_var) { 
     cout << "\n\nRecord Found!"; 
     break; 
    } 
} 
+0

いいえ、getint()関数とshow()関数をどうやって使うのですか?それはクラスなので、データメンバーは非公開で隠されています。また、あなたのコードを私の代わりにする方法についてはちょっと混乱しています。私がしようとしているのは、alpha.hファイルが含まれているプログラムでsearchclass()関数を動作させることです。クラスは何でもかまいません(クラスはクラス_uu_である必要はありません。クラスのオブジェクトをバッファの形で渡そうとしていました......これはクラスで教えられていないので私は完全に間違っている可能性があります –

+0

あなたのコードはエラーを返します: "istreamをintに変換できません"。 –

関連する問題