我有错误 “在非成员函数中无效使用'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 :: ”这个定义我同意这个问题可以避免;-)。遗憾
答案 0 :(得分:4)
createNew()
是一个自由函数(即不是类的成员),因此没有this
的概念。
答案 1 :(得分:2)
template <typename TNodeType>
Node<TNodeType> createNew() {
Node<TNodeType> model(this); //<-- ERROR HERE
return model;
}
这真的没有会员功能。 this
是C ++语言的关键字,只能在成员函数中使用。