基本クラスは、派生クラスオブジェクトの作成時に派生クラスで定義されたマクロを表示できません。 [C++ 14]基本クラスにマクロ定義を渡すことができません
Base.HPP
class Base {
public:
Base() {
#ifndef SKIP
std::cout << "Bing" << std::endl;
#endif
}
};
ファイル:Derived.HPP
#define SKIP
class Derived : public Base {
public:
Derived() {}
};
だから、私は私がBing
中を見ることはないと予想派生クラスのオブジェクトを作成するとき私はマクロSKIP
を定義して以来、出力端子。
しかし、これは起こりません。基本クラスはマクロSKIP
の定義についてはわかりません。それを行う方法はありますか?これは、-DSKIP
フラグでコードをコンパイルせずに行うことはできませんか?
マクロを使用しないでください。 – Barry
インクルードファイルは通常一度だけ処理されるため、SKIPが処理された時点でSKIPが定義されていない場合、 "Bing"は表示されません。 –
マクロは、コンパイラがコードを見る前にテキスト置換を行います。人々があなたを助けることができるかもしれないならば、重要な#include * Base.HPP *の前または後にあなたが '#define' 'SKIP 'を宣言することさえできません。また、あなたはおそらく[ODR](https://stackoverflow.com/questions/4192170)に違反していて、[UB]へ行く途中です(https://stackoverflow.com/documentation/c%2b%2b/1812/未定義の動作#t = 201702271913219429673)。 – nwp