whose type uses the anonymous namespace

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dom

whose type uses the anonymous namespace

#1

投稿記事 by dom » 13年前

下記のようなコードをgcc4.7でコンパイルすると警告が出ます。どうやら、
内部リンケージを持つものを継承しているのが問題なようですが、
私には何が問題なのかいまいち理解できません。
この警告の必要性とその解決法について教えていただけないでしょうか?

コード:

// hoge.h
class Hoge
{
public:
    // ...
private:
    // ...
    class Impl;
};


// hoge.cpp
class Hoge::Impl
{
public:
    struct InnerA;
    struct InnerB;
    struct InnerC;
   // ...
};

namespace {
class ImplBase
{
    // ...
};
} // end namespace

struct Hoge::Impl::InnerA : public ImplBase// <--エラー
{
public:
    static void func(Hoge& hoge)
    {
        // hogeのprivateにアクセス
    }
};


beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: whose type uses the anonymous namespace

#2

投稿記事 by beatle » 13年前

http://idlysphere.blog66.fc2.com/blog-entry-187.html
にも似たような症状がありました。
この警告はバグとして4.3系で直されたと書いてありましたが…
再発か、または微妙に違う箇所での警告なので元々Bug 29365には含まれていなかったか。

一つ考えられるのは、ImplBaseは翻訳単位ローカルな名前に対して、Hoge::Impl::InnerAは翻訳単位ローカルではないので、
Hoge::Impl::InnerAを他の場所で使うときに親クラスが見えないのは論理的におかしい、という判断があるのかもしれません。
(C++の規格の該当箇所は読んでいないので、本当のところは分かりません)

閉鎖

“C言語何でも質問掲示板” へ戻る