6

私はクラスを持っています:

class M {
public:
    static std::string t[];
};

後で来る初期化で。M::t を後で別のクラス (ヘッダー ファイル) で使用したい:

class Use {
public:
    void f() { std::cout << M::t[0] << std::endl; }
};

UseのヘッダーファイルにクラスM全体を含めずにこれを達成する方法はありますか? 前方宣言ではクラスメンバーへのアクセスが許可されないことは理解していますが、この美しさは静的なものであるため、コンパイラにとって大きな問題にはなりません..

4

3 に答える 3

6

いいえ、できません。ヘッダーにヘッダーを含めるか、実装を分離しUse::fて実装ファイルに入れ、Mそこに のヘッダーを含めることができます。

于 2013-04-04T08:41:38.647 に答える
3

partial複数のファイルでクラスを定義できる C# のようなクラスはありません。
メンバーにしているのですからpublic static、名前空間を作ってそこに埋め込んではいかがでしょうか。

namespace myns{

std::string t[];

}

public staticクラスメンバーの場合と同じように、どこからでもアクセスできます。

于 2013-04-04T08:44:11.093 に答える
1

前方宣言では、前方宣言されたクラス ポインターまたは参照のみを使用できます。メンバーは使用できません。例のようにクラス メンバーを使用する場合は、静的であってもクラス ヘッダーを含める必要があります。

Use.h ヘッダーに Mh を含めたくない場合の解決策は次のとおりです。

使用.h

class Use {
public:
    void f();
};

使用.cpp

#include "M.h"
#include "Use.h"

void Use::f() {
    std::cout << M::t[0] << std::endl;
}

また、もちろんインラインとテンプレートを除いて、ヘッダー ファイルにコードを記述するのは悪い習慣であることを知っておく必要があります。

于 2013-04-04T08:51:57.877 に答える