Headers 中的私有 Typedef?
Private Typedefs in Headers?
编辑:只是忘了添加“state_manager::
”我的错。
我正在尝试创建一个简单的状态系统。为了节省一些输入并使以后更容易更改,我在我的 state_manager.hpp
中放置了一些 typedef。问题是这些 typedef 在我的 state_manager.cpp
中似乎无法识别。
我得到像 'element' does not name a type
和奇怪的 'states' was not declared in this scope
这样的错误。我真的很困惑。
state_manager.hpp:
#pragma once
#include <stack>
#include <memory>
class state;
class state_manager{
typedef std::unique_ptr<state> element;
typedef std::stack<element> container;
protected:
container states;
public:
void push(const element &to_push);
void pop();
void change(const element &change_to);
};
state_manager.cpp:
#include "state_manager.hpp"
#include "state.hpp"
void push(const element &to_push){
states.push(to_push);
}
void pop(){
states.pop();
}
void change(const element &change_to){
states.pop();
push(change_to);
}
void push(const element &to_push){
states.push(to_push);
}
- 您没有定义成员函数,而是定义了非成员函数,因此您无权访问 class 的私有成员。之后你会得到一个链接器错误。不要忘记添加前缀:
void state_manager::push(const element &to_push){
states.push(to_push);
}
除了缺少作为成员函数的资格外,unique_ptr
s 不可复制,因此您当前的 push
和 change
实现将不起作用。
您可以这样更改它们:
void state_manager::push(element&& to_push) {
states.push(std::forward<element>(to_push));
}
然后可以像 my_state_manager.push(std::make_unique<state>());
那样使用
编辑:只是忘了添加“state_manager::
”我的错。
我正在尝试创建一个简单的状态系统。为了节省一些输入并使以后更容易更改,我在我的 state_manager.hpp
中放置了一些 typedef。问题是这些 typedef 在我的 state_manager.cpp
中似乎无法识别。
我得到像 'element' does not name a type
和奇怪的 'states' was not declared in this scope
这样的错误。我真的很困惑。
state_manager.hpp:
#pragma once
#include <stack>
#include <memory>
class state;
class state_manager{
typedef std::unique_ptr<state> element;
typedef std::stack<element> container;
protected:
container states;
public:
void push(const element &to_push);
void pop();
void change(const element &change_to);
};
state_manager.cpp:
#include "state_manager.hpp"
#include "state.hpp"
void push(const element &to_push){
states.push(to_push);
}
void pop(){
states.pop();
}
void change(const element &change_to){
states.pop();
push(change_to);
}
void push(const element &to_push){
states.push(to_push);
}
- 您没有定义成员函数,而是定义了非成员函数,因此您无权访问 class 的私有成员。之后你会得到一个链接器错误。不要忘记添加前缀:
void state_manager::push(const element &to_push){
states.push(to_push);
}
除了缺少作为成员函数的资格外,unique_ptr
s 不可复制,因此您当前的 push
和 change
实现将不起作用。
您可以这样更改它们:
void state_manager::push(element&& to_push) {
states.push(std::forward<element>(to_push));
}
然后可以像 my_state_manager.push(std::make_unique<state>());