エラーが発生している私のコードのセクション:
int disk::access (const char fname[]){
int char_count=77;
int actual_count=0; //just to pass the tests.
char c;
cout << "the file name is " << fname << ", and the mode is " << mode << endl;
if(strcmp(mode, "w")==0){
for (int i = 0; i < size; i++) {
//cout << "sgm to be written is " << sgm[i];
fp=fopen(fname, "w");
fprintf(fp, "%s\n",sgm[i]);
}
fclose(fp);
}
if(strcmp(mode,"a")==0){
fp=fopen(fname, "a");
fprintf(fp, "%s\n", sgm);
fclose(fp);
}
fp=fopen(fname, "r");
do{
c=fgetc(fp);
if(c!=' ' && c!='\n')
actual_count++;
}while(c!=EOF);
fclose(fp);
return actual_count;
}
私のエラー:
disk.cpp:メンバー関数内'int disk :: access(const char *)':
disk.cpp:67:警告:非PODタイプのオブジェクトを「クラスセグメント」から「...」まで渡すことはできません。呼び出しは実行時に中止されます
67行目の編集は次のとおりです。fprintf(fp、 "%s \ n"、sgm [i]);
SGMの編集:
cppコード:
disk::disk(int num_of_segments, const char* temp_mode){
size=num_of_segments;
sgm = new segment[size]; //initializes num_of_segments in a disk
count=0;
if(strcmp(mode, "w")!=0||strcmp(mode, "a")!=0){
strcpy(mode, "w");
}
}
disk::disk(){
sgm = new segment[20]; //initialize 20 segments in a disk
size=20; //keeps track of how many are initialized
count=0; //keeps track of how many are added
strcpy(mode, "w"); //initialize disk access mode to w
}
ヘッダーコード:
class disk {
private:
int size, count; //to keep a track of number of segments
char mode [2]; //a for append and w for write
segment* sgm;
FILE *fp;
public:
disk(int num_of_segments, const char *temp_mode);
disk();
~disk();
const char* get_mode( ) const;
segment get_segment(int pos) const;
int get_segment_count( ) const;
const segment* get_all_segments( ) const;
int access(const char fname[ ]);
disk& operator+=(const segment &rhs);
disk& operator=(const disk &dk);
};
私はこれまでこのような警告に出くわしたことがありません。私はいくつかの検索を行い、PODを収集したものから、「コンストラクタ、デストラクタ、および仮想メンバー関数のない構造であるプレーンな古いデータ」です。-グレッグヒューギル
それで、それを正しく理解した場合、私のエラーは、非PODであるため、コンストラクタまたはデストラクタ、あるいは仮想メンバー関数を持っているということですか?
私は自分自身を混乱させていると思います。このエラーを修正する方法や、問題が発生している場所を特定する方法がわかりません。
すべての提案を歓迎し、大いに感謝します、
ありがとう。