私の意見では、設計がかなり不十分なアプリケーションに取り組んでいますが、それは別の問題です。そのアプリには、変数を追加する必要がある単純なクラスがあります。この場合、STL スタックをクラスに追加したいと思います。他の場所で同じクラスがユニオン内で使用され、コンパイラーがクラスにコピーコンストラクターがあると不平を言うことを除いて、単純にする必要があります。追加した変数を削除すると、正常にコンパイルされます。私の最初の考えは、スタックをポインターとして追加し、コンストラクターで初期化することでしたが、コンパイラーは、クラスに自明でないコンストラクターがあると不平を言います。
私の2番目の(理想的ではない)考えは、それをポインタとして追加し、クラスの外で初期化することでした。これが良い解決策ではないことはわかっていますが、ここで書き直すことができない、設計が不十分なコードに直面しています。ただし、初期化する必要がある場所で、既に初期化されているかどうかがわからないため、これは機能しません。クラス内のポインターを NULL に初期化することはできません。これを行うだけでも、クラスに重要なコンストラクターがあるとコンパイラーが不平を言うからです。
私の質問は二重だと思います。ユニオンで使用されるクラスに STL スタックを追加する方法はありますか? そうでない場合、ユニオンで使用されるクラスで NULL へのポインターを初期化する方法はありますか?
クラスと共用体は次のようになります。
class MyClass
{
public:
std::stack<short> Index; // ideally what I wanted
}
union
{
int nNum;
MyClass myclass;
} u;
注意: ユニオンを変更することはできません。自分が思っていたことができないことを受け入れます。どんなにばかげているように聞こえても、代替手段はありますか。ユニオンを変更したり、アプリを再設計したりすることはできません。これは、約 18 年前に最初に作成された大規模なアプリで作業する場合の問題です。