尝试使用std :: function(未定义符号)

时间:2017-03-30 14:00:07

标签: c++ templates std-function

我定义了一个State<>模板类来接受通用std::function<>可调用参数列表:

template <typename T> class State;

template <class RV, class... Args>
class State<RV(Args...)>
{
private:
    std::function<RV(Args...)> code = nullptr;

public:
    RV operator()() {
        return code();
    }

    void setCode(std::function<RV(Args...)> f) {
        code = f;
    }

    State();
    State(State&);
    State(State&&);
    State& operator=(State&);
    State& operator=(State&&);
    virtual ~State();

};

现在我试图在模块中使用它:

auto s = State<void(cocos2d::Touch* touch, cocos2d::Event* event)>();

定义模板实例化,将内部std::function配置为接受带有我的参数的lambda(TouchEvent) 但我收到链接器错误Undefined symbols

Undefined symbols for architecture i386:
  "State<void (cocos2d::Touch*, cocos2d::Event*)>::State()", referenced from:
      UITableView::UITableView(cocos2d::Size, cocos2d::Vec2) in UITableView.o
  "State<void (cocos2d::Touch*, cocos2d::Event*)>::~State()", referenced from:
      UITableView::UITableView(cocos2d::Size, cocos2d::Vec2) in UITableView.o
ld: symbol(s) not found for architecture i386

1 个答案:

答案 0 :(得分:0)

我只需为类

定义(不仅是声明)构造函数和析构函数
State<>::State()
State<>::~State()
谢谢一些程序员指点这个