C ++类模板参数无效

时间:2014-12-10 18:07:45

标签: c++ class templates stl

我想定义一个二进制树类模板,如下所示:

template<typename Any>
class tree {
    public:
        struct treeNode {
            Any &_data;
            treeNode *_left, *_right;
            treeNode(const Any &data, treeNode *left = nullptr,
                     treeNode *right = nullptr) :
                     _data(data), _left(left), _right(right) {
            }
        };
    // ...
        std::vector<treeNode *> lookfor(
                const treeNode *, const std::function<bool(const Any &)> &) const;
};

// ↑ tree.h
// ↓ tree.cpp

template<typename Any>
std::vector<tree::treeNode *> tree<Any>::lookfor(
        const treeNode *x, const std::function<bool(const Any &)> &cmp) const {
    // ...
}

然后g ++不高兴并告诉我这个:

tree.cpp:129:29: error: template argument 1 is invalid
 std::vector<tree::treeNode *> tree<Any>::lookfor(
                             ^
tree.cpp:129:29: error: template argument 2 is invalid
tree.cpp:129:31: error: prototype for ‘int tree<Any>::lookfor(const tree<Any>::treeNode*, const std::function<bool(const Any&)>&) const’ does not match any in class ‘tree<Any>’
 std::vector<tree::treeNode *> tree<Any>::lookfor(
                               ^
In file included from tree.cpp:1:0:
tree.h:88:33: error:                 std::vector<tree<Any>::treeNode*> tree<Any>::lookfor(const tree<Any>::treeNode*, const std::function<bool(const Any&)>&) const
         std::vector<treeNode *> lookfor(
                                 ^

所以我想知道为什么会这样,以及我如何解决这个错误。

我不擅长英语,这是我第一次询问有关statckoverflow的问题,所以如果我犯了任何错误,请告诉我:)

1 个答案:

答案 0 :(得分:5)

代码:

std::vector<tree::treeNode *> tree<Any>::lookfor

引用树,它是一个模板,没有模板参数。它应该是这样的:

std::vector<typename tree<Any>::treeNode *> tree<Any>::lookfor

另外,由于这些是模板,因此您不应该为树提供.cpp文件,这也会导致问题。