C ++在非成员函数中使用'this'无效

时间:2013-07-18 05:34:39

标签: c++ templates this circular-dependency

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

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

tree.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

node.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 :: ”这个定义

我同意这个问题可以避免;-)。遗憾

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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