0

我有错误“在非成员函数中无效使用'this'

编写代码以避免此错误的正确方法是什么。

树.h:

#ifndef TREE_H
#define TREE_H

template <typename T>
class Node;

class Tree
{
public:
    Tree();

    template <typename TNodeType>
    Node<TNodeType> elaborate(Node<TNodeType> &node);

    Tree* self();

    void doSomething();
};

template <typename TNodeType>
Node<TNodeType> createNew() {
    Node<TNodeType> model(this); //<-- ERROR HERE
    return model;
}

#endif // TREE_H

节点.h:

#ifndef NODE_H
#define NODE_H

#include <tree.h>

template <typename TNodeType>
class Node
{
public:
    Node(Tree *tree);

    TNodeType current();

private:
    Tree *_tree;
};

template <typename TNodeType>
Node<TNodeType>::Node(Tree *tree):
    _tree(tree)
{
    _tree->doSomething();
}

template <typename TNodeType>
TNodeType Node<TNodeType>::current()
{
    //some code here
}

#endif // NODE_H

解决了。

tree.h 中,我跳过了以下声明:

template <typename TNodeType>
Node<TNodeType> createNew();

而且我在“ createNew() ”之前的定义中忘记了“ Tree::

我同意这个问题可以避免;-)。对不起

4

2 回答 2

4

createNew()是一个自由函数(即不是类的成员),因此没有this.

于 2013-07-18T05:35:50.870 回答
2
template <typename TNodeType>
Node<TNodeType> createNew() {
    Node<TNodeType> model(this); //<-- ERROR HERE
    return model;
}

它真的没有成员函数。this是 C++ 语言的关键字,只能在成员函数中使用。

于 2013-07-18T05:36:14.797 回答