4 に答える
へのアクセス権を持つすべての翻訳単位で、アクセス可能なの同じインスタンスが必要であると推測しています。内部リンケージを持つプレーンな非クラスデータとは異なり、クラス メンバーには外部リンケージがあります。これは、同じインスタンスがどこでも見られることを意味します。したがって、名前空間でゲームをプレイする必要はありません。名前空間はここでは何も変更しませんが、とにかくクラス全体を囲む必要があります。api::message
api
static
static
api
グローバル名前空間でクラスを宣言し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
ん。可能であれば、ローカル変数にすることをお勧めします。
api::message
それ自体とは異なる名前空間に入れようとしているため、コードはコンパイルされませんapi
。
static std::stringstream message
グローバルスコープでアクセスできるようにしたい
グローバルスコープでアクセスできるようにする場合は、名前空間に入れないでください。