Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在泛型模板中的辅助函数中将私有变量作为参数引用 我正在使用C++中的通用模板进行模块化编程(我们不使用OOP概念)。_C++_C++11 - Fatal编程技术网

如何在泛型模板中的辅助函数中将私有变量作为参数引用 我正在使用C++中的通用模板进行模块化编程(我们不使用OOP概念)。

如何在泛型模板中的辅助函数中将私有变量作为参数引用 我正在使用C++中的通用模板进行模块化编程(我们不使用OOP概念)。,c++,c++11,C++,C++11,我们在理解如何在辅助函数中引用模板中的单个变量(即结构本身)而不引用整个结构时遇到了一个问题 举个例子,因为听起来很奇怪,我们有: template<typename T> struct tree { friend void addElement<T> (tree<T>& c, const T& e); struct Node { T element; // template element No

我们在理解如何在辅助函数中引用模板中的单个变量(即结构本身)而不引用整个结构时遇到了一个问题

举个例子,因为听起来很奇怪,我们有:

template<typename T>
struct tree {
    friend void addElement<T> (tree<T>& c, const T& e);
    struct Node {
        T element; // template element
        Nodo* left;
        Nodo* right;
    };
 
    Node* root;
    int size;

}

template<typename T>
void friend void addElement<T> (tree<T>& c, const T& e);
    insert(c.root, e);
    c.size++;
}

// auxiliary function
template<typename T>
void insert(tree<T>root node, const T& e) { 
// how to refer to taking a Node* as an argument? we want 
// to modify the node structure of the tree in a recursive way, 
// so we will need to pass Node->left or Node->right as arguments
    // code 
}
模板
结构树{
朋友无效附加元素(树和c、常数T和e);
结构节点{
T元素;//模板元素
野多*左;
野多*对;
};
节点*根;
整数大小;
}
模板
无效朋友无效附加元素(树和c、常数T和e);
插入(c.根,e);
c、 大小++;
}
//辅助功能
模板
无效插入(treeroot节点,常量T&e){
//如何引用节点*作为参数?我们想要
//要以递归方式修改树的节点结构,
//所以我们需要将Node->left或Node->right作为参数传递
//代码
}
我们已经尝试了多种方法,但迄今为止没有一种有效。这怎么可能呢

谢谢

语法应该是
tree::Node*Node
,由于它是一个依赖名称,我们必须使用额外的
typename
typename tree::Node*Node

template<typename T>
void insert(typename tree<T>::Node* node, const T& e) { 
     // ...
}


template<typename T>
void addElement(tree<T>& c, const T& e)
{
    insert(c.root, e);
    c.size++;
}
模板
void insert(类型名树::节点*节点,常量T&e){
// ...
}
模板
无效附加元素(树和c、常数T和e)
{
插入(c.根,e);
c、 大小++;
}


不过,您可能希望通过引用传递该指针。

您的意思是
tree::Node*Node
?您可以使用backquote`将其格式化为代码。星号*表示斜体(简单*)或粗体(双**),反斜杠\表示转义。@churill谢谢!事实上,这就是我想要指出的方式(我相信),我已经在使用它来创建内部的新变量……但是如果我这样说,g++会抱怨说:错误:变量或字段“insert”声明为void 125 |模板void insert(tree::Node*Node,const T&e);你有很多“打字错误”:缺少
,额外的
无效朋友无效
。。。