1

まとめstruct: aと aclassを同じ名前で宣言するとどうなるか。

詳細

いくつかのコードを見直しているところ、次のような警告が表示されました。

warning: struct 'foo' was previously declared as a class

clang でコンパイルすると、clang が次のようなメモを追加する場所がいくつかありました。

foo.h:29:1: note: did you mean struct here?
class foo;
^~~~~
struct

明らかに、同じ名前の構造体とクラスを持つことは、適切なコーディング方法ではありません。何が起こったのかというと、開発者が自分のクラスを書いていて、彼がインクルードしていた別のファイルで既に使用されている名前を使用していたのに、彼はそれに気付かなかったようです。

ただし、私の質問は、コンパイラがとして宣言された変数とそうであった変数の違いを伝えることができるclass fooでしょstruct fooうか?

編集

実際に起こっていたことは、開発者が作成した を使用してclass fooいたclass barことです。class fooその間にが宣言されていた場所が に変更されたと思いますstruct bar。そのため、コードがコンパイルされていました。したがって、私の質問に対する答えは、オブジェクトを宣言するときにstructとは交換可能であると思います。classそれでも、一貫して使用することは良い考えだと思います。

4

4 に答える 4

7

キーワードstructclassはほとんど交換可能です。と書いても、 という名前のクラス型をstruct Foo作ったことになります。また、その名前はそのスコープ内で一意でなければなりません (C との互換性のための特別な例外がありますが、これは無視したほうがよいでしょう)。Foo

于 2013-04-25T16:58:59.753 に答える
1

クラスまたは構造体を定義している場合でも、識別子は一意である必要があります。

于 2013-04-25T16:58:40.147 に答える