選項1
由於Stack
在的Test
成員函數的實現單獨使用,使該類的private
和static
成員變量。
class Test
{
public:
void AddStack(std::string str);
void PopStack();
private:
static std::vector<std::string> Stack;
};
並在cpp文件,添加:
std::vector<std::string> Test::Stack;
選項2
使Stack
可用的Test
成員函數通過函數調用而不是可變的。
class Test
{
public:
void AddStack(std::string str);
void PopStack();
private:
static std::vector<std::string>& getStack();
};
實現:
std::vector<std::string>& getStack()
{
static std::vector<std::string> Stack;
return Stack;
}
void Test::AddStack(std::string str)
{
auto& Stack = getStack();
Stack.insert(Stack.end(),str.begin(),str.end());
}
void Test::PopStack()
{
auto& Stack = getStack();
if(!Stack.empty())
{
Stack.pop_back();
}
}
選項3
讓Test
獨立的,並讓Stack
類的非static
成員。
class Test
{
public:
static Test& instance();
void AddStack(std::string str);
void PopStack();
private:
std::vector<std::string> Stack;
};
實現:
Test& Test::instance()
{
static Test theInstance;
return theInstance;
}
void Test::AddStack(std::string str)
{
Stack.insert(Stack.end(),str.begin(),str.end());
}
void Test::PopStack()
{
if(!Stack.empty())
{
Stack.pop_back();
}
}
,並用它作爲:
Test::instance().AddStack("abcd");
Test::instance().PopStack();
你是否對你有這麼遠的某個特定代碼的問題?至少,你可以考慮使'Stack'變量成爲'Test'類的'static'成員,而不是全局變量。順便說一句,你確定你打算使用'Stack.insert(Stack.end(),str.begin(),str.end());'而不是'Stack.push_back(str);'而不是? ' –
代碼工作正常,但我相信我寫我的代碼的方式不是最好的方式。 –