2
4

4 に答える 4

1

へのアクセス権を持つすべての翻訳単位で、アクセス可能なの同じインスタンスが必要であると推測しています。内部リンケージを持つプレーンな非クラスデータとは異なり、クラス メンバーには外部リンケージがあります。これは、同じインスタンスがどこでも見られることを意味します。したがって、名前空間でゲームをプレイする必要はありません。名前空間はここでは何も変更しませんが、とにかくクラス全体を囲む必要があります。api::messageapistaticstaticapi

于 2013-02-12T07:35:50.513 に答える
1

グローバル名前空間でクラスを宣言しapiたため、別の名前空間でメンバーを定義できません。あなたがする必要があるapi::messageのは、cppファイルで定義することです

api.h

class api
{
private:
    void psParser ()
    {
        std::stringstream psOutput;
        psOutput << "ps --no-headers -f -p " << getpid() << " > .txt";

        system (psOutput.str().c_str());

        std::stringstream processInfo;
        processInfo << ":"__FILE__ << ":" << __DATE__ << ":" << __TIME__ << ":";
    }

public:
    static std::stringstream message;
};

API.cpp

std::stringstream api::message;

main.cpp

#include "api.h"

int main ()
{
    api::message << "zxzx";

    return 0;
}

ただし、静的にすることはベスト プラクティスではありませstd::stringstreamん。可能であれば、ローカル変数にすることをお勧めします。

于 2013-02-12T07:27:19.897 に答える
0

api::messageそれ自体とは異なる名前空間に入れようとしているため、コードはコンパイルされませんapi

static std::stringstream messageグローバルスコープでアクセスできるようにしたい

グローバルスコープでアクセスできるようにする場合は、名前空間に入れないでください。

于 2013-02-12T07:20:54.770 に答える