2016-10-19 8 views
2

私は構造体やクラスを使いこなしています。試してみたかったコーディングが本当にクールです。XMacroの構造体をC++でコンソールに出力

私のコードは、3ビットのヘッダー、xマクロ、メインのcppファイルに分割されています。プログラムは終了していませんし、コードカバレッジと研磨がまだありますが、xマクロを使って構造体を構築しようとしていますが、構造体の内容を画面に出力したいと考えています。

ここに私のX-マクロ

#define X_AIRCRAFT \ 
X(int, Crew) \ 
X(int, SeatingCapacity) \ 
X(int, Payload) \ 
X(int, Range) \ 
X(int, TopSpeed) \ 
X(int, CargoCapacity) \ 
X(int, FuelCapacity) \ 
X(int, Engines) \ 
X(int, Altitude) \ 
X(double, mach) \ 
X(double, Wingspan) 

はここに私のヘッダ(かなり不毛今)

#include <iostream> 
#include <string> 
#ifndef X_AIRCRAFT 
#include "xmacro.xmacro" 
#endif // ! 



using namespace std; 


typedef struct { 
#define X(type, name) type name; 

    X_AIRCRAFT 
#undef X 
}Public_Airplane; 

//Prototypes 
void iterater(Public_Airplane *p_a); 

はここに私のmain()(私はここでのコードの束をカットしました。私がやったことだだですここで要約すると、異なるプロパティを持つAirplaneクラスを作成しました。次に、Airplaneのプロパティを継承し、独自のものを作成した3つの異なるサブクラスを作成しました。私がやることは、正常に動作していない機能...)

#include <iostream> 
#include <string> 
#include <iomanip> 
#include "aircraft.h" 

#ifndef X_AIRCRAFT 
#include "xmacro.xmacro" 
#endif // ! 


using namespace std; 




    int main() 
{ 
    Public_Airplane p_a; 

    iterater(&p_a); 

    system("pause"); 
    return 0; 
} 



void iterater(Public_Airplane *p_a) 
{ 

    //I want to print to screen the contents of my x-macro (and therefore my struct) 
#define X(type, name) cout << "Value: = " << name; 
    X_AIRCRAFT 
#undef X 
} 

私は今、そうしようとしている理由である、前のマクロで働いたことがありません。

int crew; 
int SeatingCapacity; 
int Payload 
int Range;    
int TopSpeed;   
int CargoCapacity;  
int FuelCapacity;  
int Engines;    
int Altitude;   
double mach;    
double Wingspan; 

cout << "Value: = " << Crew; (and so on down the list). 

私が間違っているのそれは上記のコードの出力を得ることから私を保っているもの:しかし、私の理解に、前処理のコードは次のようになりますか?

+0

'cout <<" Value:= "name;' 'cout <<"のように書き直してください。値:= "<< name;'、おそらく? – templatetypedef

+0

私はちょうどタイプミスに気付きました。私は<<を自分のコードとダイスに追加しました。 –

答えて

1

あなたは最終的にこのようなコードを生成します:一般的なパターンは、それを選択するには、矢印演算子を使用し、その後、その後、等号、名前の文字列表現をプリントアウトすることです

void iterater(Public_Airplane* p_a) { 
    cout << "Crew = " << p_a->Crew << endl; 
    cout << "SeatingCapacity = " << p_a->SeatingCapacity << endl; 
    ... 
} 

をメンバーはクラス外にいます。

void iterater(Public_Airplane *p_a) 
{ 
    #define X(type, name) cout << #name << " = " << p_a->name << endl; 
    X_AIRCRAFT 
    #undef X 
} 

これは文字列演算子#を使用して名前を引用符で囲んだものに変換します。

+0

私はそれを試してみようとしています。入力いただきありがとうございます! –

+0

あなたのコードは理にかなっていますが、プログラムをステップ実行するとコードを実行せずに関数を通過します。 –

+0

これは問題なのかどうか分かりませんが、ファイルに前処理すると、プリプロセッサのコードは表示されません。私はint Crewを見ることができると思った。 int SeatingCapacity; ... 等々。しかし、ファイルにはそれがありません。 xmacrosを使用するために必要ないくつかのインクルードがありますか? –