2017-09-19 9 views
0

少しの助けが必要です。私はプロジェクトのために書いたコードを持っています。コードを別々の.hと.cppファイルに分ける方法が混乱します。ほとんどの検索は、クラスを使用しています。このプログラムにはクラスはありません。私はマップとベクトルだけを使用しています。私はこれを行う方法が完全にはわからないし、私はあまりにも知りたいと思う!C++ファイルの分離

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

#include <iostream> 
#include <map> 
#include <vector> 

using namespace std; 


int main() { 

    map<int, string> Broncos_Roster; 

    Broncos_Roster[88] = " Demaryius Thomas, Georgia Tech, WR "; 
    Broncos_Roster[72] = " Garret Bolles , Utah, LT    "; 
    Broncos_Roster[76] = " Max Garcia , Florida, LG    "; 
    Broncos_Roster[61] = " Matt Paradis, Bosie State, C   "; 
    Broncos_Roster[65] = " Ron Leary, Memphis, RG    "; 
    Broncos_Roster[75] = " Menelik Watson, Florida State, RT  "; 
    Broncos_Roster[85] = " Virgil Green, Nevada, TE    "; 
    Broncos_Roster[10] = " Emmanuel Sanders, Southern Methodist "; 
    Broncos_Roster[22] = " C.J. Anderson, California, RB   "; 
    Broncos_Roster[13] = " Trevor Siemian, North Western, QB  "; 
    Broncos_Roster[32] = " Andy Janovich, Nebraska, FB   "; 
    Broncos_Roster[95] = " Derek Wolfe , Cincinnati, DE   "; 
    Broncos_Roster[94] = " Domata Peko Sr. , Michigan State, NT "; 
    Broncos_Roster[93] = " Jared Crick, Nebraska, DE    "; 
    Broncos_Roster[58] = " Von Miller, Texas A & M, WLB   "; 
    Broncos_Roster[54] = " Brandon Marshall, Nevada, ILB   "; 
    Broncos_Roster[51] = " Todd Davis, Sacramento State, ILB  "; 
    Broncos_Roster[21] = " Aqib Talib, Kanas, LCB    "; 
    Broncos_Roster[27] = " Brendan Langley, Lamar, RCB   "; 
    Broncos_Roster[31] = " Justin Simmons , Boston College, SS "; 
    Broncos_Roster[26] = " Darian Stewart , South Carolina , FS "; 
    Broncos_Roster[8] = " Brandon McManus, Temple, PK   "; 
    Broncos_Roster[9] = " Riley Dixon , Syracuse, P    "; 
    Broncos_Roster[42] = " Casey Kreiter , Iowa, LS    "; 
    Broncos_Roster[14] = " Cody Latimer , Indiana KR   "; 
    Broncos_Roster[84] = " Isaiah Mckenzie, Georgia, PR   "; 

    for (auto &it : Broncos_Roster) 
     cout << it.first << " => " << it.second << '\n'; 


    vector<string> phoneticAlphabet; 

    cout << " This is the Phonetic Alphabet" ; 

    phoneticAlphabet.emplace_back("Alpha")  ; 
    phoneticAlphabet.emplace_back("Bravo")  ; 
    phoneticAlphabet.emplace_back("Charlie") ; 
    phoneticAlphabet.emplace_back("Delta")  ; 
    phoneticAlphabet.emplace_back("Echo")  ; 
    phoneticAlphabet.emplace_back("Foxtrot") ; 
    phoneticAlphabet.emplace_back("Golf")  ; 
    phoneticAlphabet.emplace_back("Hotel")  ; 
    phoneticAlphabet.emplace_back("India")  ; 
    phoneticAlphabet.emplace_back("Juliett") ; 
    phoneticAlphabet.emplace_back("Kilo")  ; 
    phoneticAlphabet.emplace_back("Lima")  ; 
    phoneticAlphabet.emplace_back("Mike")  ; 
    phoneticAlphabet.emplace_back("November") ; 
    phoneticAlphabet.emplace_back("Oscar")  ; 
    phoneticAlphabet.emplace_back("Papa")  ; 
    phoneticAlphabet.emplace_back("Quebec")  ; 
    phoneticAlphabet.emplace_back("Romeo")  ; 
    phoneticAlphabet.emplace_back("Sierra")  ; 
    phoneticAlphabet.emplace_back("Tango")  ; 
    phoneticAlphabet.emplace_back("Uniform") ; 
    phoneticAlphabet.emplace_back("Victor")  ; 
    phoneticAlphabet.emplace_back("Whiskey") ; 
    phoneticAlphabet.emplace_back("Xray")  ; 
    phoneticAlphabet.emplace_back("Yankee")  ; 
    phoneticAlphabet.emplace_back("Zulu")  ; 

    cout << " Vector size = " << phoneticAlphabet.size() << endl; 


    for (auto &itt : phoneticAlphabet) 
     cout << itt << "\n"; 

    string query = " "; 

    cout << " Please select a letter to see the ! "; 
    //cin.ignore(); 
    getline(cin, query); 

    string letters[] = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", 
         "T", "U", "V", "W", "X", "Y", "Z"}; 

    cout << "you entered a " << query ; 

    int index = 0; 

    for (int i = 0; i < 26; i++) 
    { 
     if (query == letters[i]) 
     { index = i; } 

    }; 

    cout << " phonetic letter = " << phoneticAlphabet[index] << endl; 

    system("pause"); 

} 

私は任意の助けに感謝します!

+4

あなたはそれを分離する必要がある場合でも停止して自分自身に質問してみませんか? *する必要はありません。 – StoryTeller

+0

* small *ソースファイルです。多くのソースファイルには何千もの行があります。いくつかはさらに多くを持っています。そして、C++では、すべてのクラスを独自のソースファイルに入れる理由はありません(私はその悪い味を見いだしますが、いくつかの人々は異なる意見を持っています)。あなた自身の意見を鍛えるために既存の[フリーソフトウェア](https://en.wikipedia.org/wiki/Free_software)プロジェクト(おそらくhttp://github.com/ ...)を調べてください –

+2

これはwwwによくフィットします.codereview.stackexchange.com、あなたのコードは正常に動作しますが、あなたはそれを改善する方法を探しています。 – Tas

答えて

2

実際にコードをヘッダファイルとソースファイルに分ける必要はありません。

しかし、(学習や練習に)言いたいのであれば、一般的な考え方は、.hファイルに関数宣言を、.cppファイルに関数の実装を配置することです。だから、あなたは、関数を作成した場合、populateRoster()は、ヘッダーファイル内の関数の1行の宣言を配置します:

void populateRoster(); 

し、任意のソースファイルで、完全な機能のテキスト:

void populateRoster() 
{ 
    // do something... 
} 

ソースファイルは、ヘッダーファイルを#includeする必要があります。その後、main()またはヘッダファイルを含む他の関数からpopulateRoster()を呼び出すことができます。

main()と同じ.cppファイル内でmain()の上に定義するだけで、ヘッダファイルを作成しなくてもmain()から呼び出すことができます。

+0

ありがとう!私は説明に本当に感謝しています!私はこれを学習と練習のためにやっていました。これは小規模な学校の割り当てで、ちょっときれいにする方法を見てみたいです!ありがとう – JFive575

1

コードを区切る必要はありません。その後、

しかし、あなたはを余儀なくされている場合、:

はあなたのマップとあなたのベクトルを初期化するための1つを初期化する関数を使用します。これらの2つの関数をソースファイルに置き、ヘッダーファイルも提供します。

このヘッダーファイルをmain()に含め、初期化コードをこれらの関数を2回呼び出すことで置き換えれば完了です。


私は選択肢があったとしても、私のコードをファイルに分割しませんが、上記の機能を使用します。

+1

ありがとう!私はアドバイスを感謝します。私はまだかなり新しく、より良くなるためにいくつかの細い練習をしています!ありがとう! – JFive575

0

classが不要なので、Broncos_RosterphoneticAlphabetを公開することができる場合は、ヘッダーファイル(例:myHeader.h)に入れてください。そうでない場合は、その内容をcppファイルmyHeader.cppに入れてください。myHeader.hは、インターフェイスをそのまま残しておいてください。

オブもちろん、あなたは次のようにOOPの設計概念を使用することができますようnamespace MyData { ... }

  • 使用方法/機能マップとベクトルを取得するには、myHeader.h中:

    const map<int, string>& get_Broncos_Roster() { // return Broncos_Roster; }

    • 使用の名前空間

    コード内のマップとベクターが一定の場合は、定数にマップとベクトルを置き換えるために、ところで

    const map<int, string> Broncos_Roster = { 
        { 88, " Demaryius Thomas, Georgia Tech, WR " }, 
        { 72, " Garret Bolles , Utah, LT    " }, 
        ... ... 
        { 14, " Cody Latimer , Indiana KR   " }, 
        { 84, " Isaiah Mckenzie, Georgia, PR   " }, 
        }; 
    
    // if it's static and const 
    static const vector<string> phoneticAlphabet = { 
        "Alpha", 
        "Bravo", 
        ... ... 
        "Yankee", 
        "Zulu", 
        }; 
    

    ::「のような、それらを一定にするC++の新しい機能を使用する方が良いよ

    msr -p your.cpp -t "Broncos_Roster\s*\[([^\]]+)\]\s*=\s*(.+?)\s*;" -o "{ $1, $2 }," -R

    msr -p your.cpp -t "phoneticAlphabet.emplace_back\((.+)\);" -o "$1," -R

    参照してください。以下のスクリーンショット:msr.exe/msr.gcc*はオープ​​ンプロジェクトの単一のexeツールですhttps://github.com/qualiu/msrtoolsディレクトリ

    replace-to-const-map-vector

  • 0

    あなたはそれをソースとヘッダファイルにコードを分離するために、本当に必要はありません、あなたのメインのすべてを書いて考えます。プロトタイプを作成する機能がなく、あなたのメインファイルがソースファイルにあるので、ヘッダーファイルは空になります。

    何らかの理由でmainを別々の関数に分割し、それを別のソースファイルに入れなければならない場合は、それ自身のヘッダファイルを使用します。