2016-04-04 7 views
0

私は現在、main.ccファイルとdatabase.ccファイルは完全に動作していますが、main.ccファイルはテスト対象のファイルと一致しません。私はそれを変換しようとしましたが、それはエラーをスローし続け、私は私の全体のコードを壊して、再び開始する時間がありません。C++プログラムをコンパチブルにする

これは私のdatabase.ccファイルです:これは、main.ccファイルです

#include "database.cc" 

    int main() 
    { 
     Flightlist flight_list; 
     string fname, lname, destination; 

    while (true) 
    { 
     switch (flight_list.menu()) 
     { 
      case 1: 
       { 
        flight_list.read_from_file("ticket_reservations.dat"); 
        break; 
       } 

      case 2: 
       { 
        cout << "first name of passenger:" << endl; 
        cin >> fname; 
        cout << "last name of passenger" << endl; 
        cin >> lname; 
        cout << "destination of passenger" << endl; 
        cin >> destination; 
        flight_list.insert(Passenger(fname, lname, destination)); 
        break; 
       } 

      case 3: 
       { 
        cout << "first name of passenger:" << endl; 
        cin >> fname; 
        cout << "last name of passenger" << endl; 
        cin >> lname; 
        cout << "destination of passenger" << endl; 
        cin >> destination; 
        flight_list.remove(Passenger(fname, lname, destination)); 
        break; 
       } 

      case 4: 
       { 
        cout << "first name of passenger:" << endl; 
        cin >> fname; 
        cout << "last name of passenger" << endl; 
        cin >> lname; 
        cout << "destination of passenger" << endl; 
        cin >> destination; 
        if (flight_list.check_reservation(Passenger(fname, lname, destination))) 
         cout << "this passenger has a ticket reservation" << endl; 
        else 
         cout << "this passenger does not have a ticket reservation" << endl; 
        break; 
       } 

      case 5: 
       { 
        flight_list.display_list(); 
        break; 
       } 

      case 6: 
       { 
        flight_list.save_to_file("ticket_reservations.dat"); 
       } 
       break; 


      case 7: 
       return 0; 
     } 
    } 

    return 0; 
} 

:これは、上記のプログラムを完璧に動作私の現在のmain.ccファイルです

#include<list> 
#include<algorithm> 
#include<iostream> 
#include<string> 
#include<fstream> 
#ifndef passenger_h 
#define passenger_h 
using std::string; 
using std::cin; 
using std::cout; 
using std::list; 
using std::endl; 

class Passenger { 
public: 
    Passenger() {} 
    Passenger(string, string, string); 
    bool operator==(const Passenger&) const; 
    bool operator<(const Passenger&) const; 
    void print(std::ostream& os); 
private: 
    string fname, lname, destination; 

}; 

class Flightlist { 
public: 
    int menu(); 
    void read_from_file(string); 
    void insert(Passenger p); 
    void remove(Passenger p); 
    bool check_reservation(Passenger p); 
    void display_list(); 
    void save_to_file(string); 
private: 
    list<Passenger> flist; 
}; 

#endif 


Passenger::Passenger(string first, string last, string dest) 
{ 
    fname = first; 
    lname = last; 
    destination = dest; 
} 

bool Passenger::operator==(const Passenger& p) const 
{ 
    return fname == p.fname && lname == p.lname; 
} 

bool Passenger::operator<(const Passenger& p) const 
{ 
    return fname < p.fname || (fname == p.fname && lname < p.lname); 
} 

void Passenger::print(std::ostream& os) 
{ 
    os << fname << ' ' << lname << ' ' << destination << '\n'; 
} 

int Flightlist::menu() 
{ 
    int option; 
    cout << endl; 
    cout << "Enter one of the following options:" << endl; 
    cout << "1. load reservations from file:" << endl; 
    cout << "2. reserve a ticket" << endl; 
    cout << "3. cancel a reservation" << endl; 
    cout << "4. check reservation" << endl; 
    cout << "5. display passenger list" << endl; 
    cout << "6. save passenger list" << endl; 
    cout << "7. exit" << endl << endl; 
    cin >> option; 
    cin.get(); 
    return option; 
} 

void Flightlist::read_from_file(string filename) 
{ 
    string fname, lname, destination; 
    std::ifstream input(filename.c_str()); 
    while (input >> fname >> lname >> destination) 
    {     
     flist.push_back(Passenger(fname, lname, destination)); 
    } 
    input.close(); 
} 

void Flightlist::insert(Passenger p) 
{ 
    flist.push_back(p); 
} 

void Flightlist::remove(Passenger p) 
{ 
    flist.remove(p); 
} 

bool Flightlist::check_reservation(Passenger p) 
{ 
    list<Passenger>::iterator i1, i2; 
    i1 = flist.begin(); 
    i2 = flist.end(); 
    return flist.end() != find(flist.begin(), flist.end(), p); 
} 

void Flightlist::display_list() 
{ 
    flist.sort(); 
    list<Passenger>::iterator i1, i2; 
    i1 = flist.begin(); 
    i2 = flist.end(); 
    for (; i1 != i2; ++i1) { 
     i1->print(cout); 
    } 
} 

void Flightlist::save_to_file(string filename) 
{ 
    flist.sort(); 
    list<Passenger>::iterator i1, i2; 
    i1 = flist.begin(); 
    i2 = flist.end(); 
    std::ofstream output(filename.c_str()); 
    for (; i1 != i2; ++i1) { 
     i1->print(output); 
    } 
    output.close(); 
} 

私のプログラムはテストされるので、私のコードを以下のものと互換性を持たせるために変換する必要があります:

大量のコードをお詫び申し上げますが、私は必然的にこれを助ける必要があります。ありがとうございました!

+3

私の20年以上のC++開発では、誰もが.cc/.cppファイルを '#include 'することはなかった。コンパイルしても驚いています。 – MrEricSir

+1

@MrEricSirこれで、コードをどのように扱うことができたのですか、私はその部分を制御できません。私は自分で別の.hファイルを作成しましたが、許可されておらず、すべてが同じインプリメンテーションファイルになければならないと言われました。 – Brittany

+0

@MrEricSirしかし、私が書いたmain.ccファイルをコンパイルして正しく動作するので、実際には問題はありません。してください、どんな助けもありがとう。 – Brittany

答えて

0

一般的な関数として定義したことがないため、関数が機能しません。それらはクラス関数のメンバーです。

あなたはあなたのリストを反復処理し、クラスメンバを呼び出す必要がある - 私はすべてのコードを書き換えるつもりはないが、ここではイラストです:私はクラスのメンバーとしてMyMethodはを呼んでいる

list<MyClass> MyList; 
// ... your list is populated here .. 
for(auto iter=MyList.begin(); iter!=MyList.end(); ++iter) { 
    // ... decide what to do here ... 
    *iter->MyMethod(argument1,argument2) 
    // ... etc ... 
} 

注意関数としてではなく、最初に、あなたのメソッドをこのように呼び出すようにコードを調整する必要があります。つまり、クラスインスタンス外のリストを参照する必要があります。

関数メンバーにアクセスするために.(またはポインタでアクセスする場合は->)を使用しますctlyを関数として扱います。

あなたが持っている唯一の他のオプションは、database.ccにラッパー関数を追加して、新しいmain.ccで呼び出しようとしている関数を定義することです。

0

ここにコンパイルされた新しいDatabase.ccがあります。

テストmain.ccはフリー関数を呼び出すので、すべての関数スタブに新しいオブジェクトを作成したようです。

そして、リストのFlightlistにコンストラクタを追加しました。

// #include "stdafx.h" // uncomment for MS version 
    #include<list> 
    #include<algorithm> 
    #include<iostream> 
    #include<string> 
    #include<fstream> 
    #ifndef passenger_h 
    #define passenger_h 
    using std::string; 
    using std::cin; 
    using std::cout; 
    using std::list; 
    using std::endl; 

    class Passenger { 
    public: 
     Passenger() {} 
     Passenger(string, string, string); 
     bool operator==(const Passenger&) const; 
     bool operator<(const Passenger&) const; 
     void print(std::ostream& os); 
    private: 
     string fname, lname, destination; 

    }; 

    class Flightlist { 
    public: 
     int menu(); 
     void read_from_file(string); 
     void insert(Passenger p); 
     void remove(Passenger p); 
     bool check_reservation(Passenger p); 
     void display_list(); 
     void save_to_file(string); 

    // --- CHANGES START ---------------- 

     Flightlist() {}; 
     ~Flightlist() {}; 
     Flightlist(list<Passenger> flistInput) : flist(flistInput){}; 
    private: 
     list<Passenger> flist; 
    }; 

    int menu() { 
     static Flightlist FL; 
     return FL.menu(); 
    } 

    void read_from_file(list<Passenger> flist, string s) { 
     Flightlist FL(flist); 
     FL.read_from_file(s); 
    } 

    void insert(list<Passenger> flist, string first, string last, string dest) { 
     Flightlist FL(flist); 
     Passenger p(first, last, dest); 
     FL.insert(p); 
    } 

    void remove(list<Passenger> flist, string first, string last) { 
     Flightlist FL(flist); 
     Passenger p(first, last, NULL); 
     FL.remove(p); 
    } 

    bool check_reservation(list<Passenger> flist, string first, string last) { 
     Flightlist FL(flist); 
     Passenger p(first, last, NULL); 
     return FL.check_reservation(p); 
    } 

    void display_list(list<Passenger> flist) { 
     Flightlist FL(flist); 
     FL.display_list(); 
    } 

    void save_to_file(list<Passenger> flist, string s) { 
     Flightlist FL(flist); 
     FL.save_to_file(s); 
    } 

    // --- CHANGES STOP ---------------- 

    #endif 


    Passenger::Passenger(string first, string last, string dest) 
    { 
     fname = first; 
     lname = last; 
     destination = dest; 
    } 

    bool Passenger::operator==(const Passenger& p) const 
    { 
     return fname == p.fname && lname == p.lname; 
    } 

    bool Passenger::operator<(const Passenger& p) const 
    { 
     return fname < p.fname || (fname == p.fname && lname < p.lname); 
    } 

    void Passenger::print(std::ostream& os) 
    { 
     os << fname << ' ' << lname << ' ' << destination << '\n'; 
    } 

    int Flightlist::menu() 
    { 
     int option; 
     cout << endl; 
     cout << "Enter one of the following options:" << endl; 
     cout << "1. load reservations from file:" << endl; 
     cout << "2. reserve a ticket" << endl; 
     cout << "3. cancel a reservation" << endl; 
     cout << "4. check reservation" << endl; 
     cout << "5. display passenger list" << endl; 
     cout << "6. save passenger list" << endl; 
     cout << "7. exit" << endl << endl; 
     cin >> option; 
     cin.get(); 
     return option; 
    } 

    void Flightlist::read_from_file(string filename) 
    { 
     string fname, lname, destination; 
     std::ifstream input(filename.c_str()); 
     while (input >> fname >> lname >> destination) 
     { 
      flist.push_back(Passenger(fname, lname, destination)); 
     } 
     input.close(); 
    } 

    void Flightlist::insert(Passenger p) 
    { 
     flist.push_back(p); 
    } 

    void Flightlist::remove(Passenger p) 
    { 
     flist.remove(p); 
    } 

    bool Flightlist::check_reservation(Passenger p) 
    { 
     list<Passenger>::iterator i1, i2; 
     i1 = flist.begin(); 
     i2 = flist.end(); 
     return flist.end() != find(flist.begin(), flist.end(), p); 
    } 

    void Flightlist::display_list() 
    { 
     flist.sort(); 
     list<Passenger>::iterator i1, i2; 
     i1 = flist.begin(); 
     i2 = flist.end(); 
     for (; i1 != i2; ++i1) { 
      i1->print(cout); 
     } 
    } 

    void Flightlist::save_to_file(string filename) 
    { 
     flist.sort(); 
     list<Passenger>::iterator i1, i2; 
     i1 = flist.begin(); 
     i2 = flist.end(); 
     std::ofstream output(filename.c_str()); 
     for (; i1 != i2; ++i1) { 
      i1->print(output); 
     } 
     output.close(); 
    } 
+0

あなたの努力に感謝します。しかし、私は 'Flightlist'クラスを削除してそのように動作させる必要があると言われました。ありがとうございます – Brittany

関連する問題