-3

テキスト ファイルから stl リストにデータを挿入する while ループに問題があります。私のエラーを理解するのを手伝ってもらえますか? どうもありがとう。エラーは

server3.cpp: In function ‘int main(int, char**)’:
server3.cpp:43:11: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
server3.cpp:74:15: error: ‘class std::list<Record>’ has no member named ‘id’
server3.cpp:74:25: error: ‘class std::list<Record>’ has no member named ‘firstName’
server3.cpp:74:42: error: ‘class std::list<Record>’ has no member named ‘lastName’
server3.cpp:75:12: error: ‘class std::list<Record>’ has no member named ‘id’
server3.cpp:76:17: error: no match for ‘operator[]’ in ‘hashtable[hash]’
server3.cpp:76:50: error: expected primary-expression before ‘)’ token

コードは次のとおりです。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <vector>
#include <list>
#include <iostream>
#include <fstream>
using namespace std;

const int SIZE =100;/*size of hashTable*/
/*Struct representing the record*/
struct Record
{
     int id;
     char firstName[100];
     char lastName[100];
} rec;


/*Structure representing a single cell*/
class Cell
{
    std:: list<Record> recs;
    pthread_mutex_t lock;
};

/* The actual hash table */
std::list<Cell> hashtable;



int main (int argc, char * argv[])
{

    ifstream indata; /* indata is like a cin*/
        indata.open("fileName"); /* opens the file*/

    list <Record> rec;/*create an object*/
    int hash;
    while ( !indata.eof() ) /* keep reading until end-of-file*/
    { 
    indata>> rec.id >> rec.firstName >> rec.lastName;
    hash =rec.id % sizeof(hashtable);
    hashtable [hash].listofrecords.push_back (Record);

    }
     indata.close();

   return 0;    



}
4

3 に答える 3

1

彼らのほとんどはlist、メンバーがいないと言っています。

indata>> rec.id >> rec.firstName >> rec.lastName;

recリストであり、ではありませんRecord

hashtable[hash]

も不正です ( のインターフェイスを参照してくださいstd::list。 およびRecordは型であり、コンテナーに型を挿入することはできません。オブジェクトのみを挿入できます。

...push_back (Record);

違法です。

このコードには、私たちがときどき犯すエラーが時折あるだけでなく、根本的な欠陥があります。良い本から C++ の学習を開始することをお勧めします (それを行っている場合) 。

于 2012-12-11T00:39:45.597 に答える
0

この行だけでも、少なくとも 3 つの主要な問題があります。

 hashtable [hash].listofrecords.push_back (Record);
  1. std::listがないため、添え字operator[]を使用できません。[hash]
  2. プログラムのどこにも、listofrecords意味を定義していません。
  3. オブジェクトが必要な名前push_backにしようとしています。Record

始めるのに適した C++ の本を見つけてください: The Definitive C++ Book Guide and List

于 2012-12-11T00:45:55.890 に答える
0

レコードのコレクションを作成していることに注意してください。これは、そこに含まれるレコードのフィールドにアクセスする前に、コレクションの要素にアクセスする必要があることを意味します。

リスト型の使用に関するリファレンスは次のとおりです: http://www.cplusplus.com/reference/list/list/

于 2012-12-11T00:40:58.640 に答える