2017-05-29 20 views
0

MS Visual StudioからレガシーコードをClangに移植し、保護されたデータメンバーに問題が発生しました。要するに、私の問題は次のとおりです。clangは保護されたデータメンバーを認識しません

これはMSVC++ではうまくコンパイルされますが、Clangではコンパイルされません。 Clangは文句を言う:

宣言されていないindentifier sb_の使用。

マイヤー効果的なC++以降私はたくさんの保護を使用せず、使用しないコードを書き直すことができますが、派生クラスはBaseクラスの保護されたメンバーを見ることができるので、 。私は何が欠けていますか?

+1

あなたは、全体のエラーメッセージ、またはそれの少なくとも一部を投稿してくださいことはできますか?実際の問題は、 'sb_'に' number'という関数がないということです。 – Rakete1111

+1

シャドーは 'sb _-> number();'にならないでください。 – Amadeus

+1

MCVE ...........? –

答えて

2

sb_->number()してみてくださいを変更しますthis->sb_->number()

When should I make explicit use of the `this` pointer?

+0

IMHO、これが詐欺師であることを知っているならば、それに答えるよりもそれにフラグを立てる方がいいです。 – Walter

+0

私は同意しますが、残念ながら、私は質問を重複としてクローズする権利がありません。 – Kane

+0

ありがとうございます。実際、基本クラスがテンプレート化されている場合は、これを明示的に使用する必要があります。 – Mike

0

unique_ptr sはコピーできませんBaseのコンストラクタでコピーしようとしていますが、最初にエラーが発生した場合はそれを修正してください。打ち鳴らす出力で、コメントで指摘したようにさらに

は、sb_はポインタではなく参照であることを修正し、あなたはそれに->演算子を使うべきではなく、.そうsb_->number()

関連する問題