首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

类型的有关问题,关于引用

2012-12-15 
类型的问题,关于引用demo代码如下:void BST::insert(BSTNode & n, BSTNode* & t){BSTNode* tempt-getLef

类型的问题,关于引用
demo代码如下:
void BST::insert(BSTNode & n, BSTNode* & t)
{
BSTNode* temp=t->getLeft();
insert(n,temp);
}
上述代码可以编译通过,但是改成这样:
void BST::insert(BSTNode & n, BSTNode* & t)
{
insert(n,t->getLeft());
}
就报错:
no matching function for call to ‘BST::insert(BSTNode&, BSTNode*)
no known conversion for argument 2 from ‘BSTNode*’ to ‘BSTNode*&’
请问这是为什么?上面两个代码应该是等效才对吧,不理解,多谢解释!
[最优解释]

引用:


BSTNode* & getLeft()const // 题目要求这个 const 必须有?
[其他解释]
t->getLeft() // 这里返回临时变量,不能作为引用,除非是const修饰的引用
[其他解释]
你GetLeft()返回的是临时变量 ,
c++不允许创建临时变量的非const引用
像这样
point* _Temp=GetLeft();
insert(n,_Temp);
OK了,
你上面那一行代码有逻辑错误,就算你可以修改一个临时变量的引用,但是函数返回以后,这个引用怎么得到?
就算用特殊方法拿到了,那个引用也早就销毁了
[其他解释]
再附个例子

void func(int*&){}
void hanshu(int* const &){}

int* licheng()
{
static int temp;
return &temp;
}

int main()
{
func(licheng()); // 错误
hanshu(licheng());

return 0;
}

[其他解释]
引用:
再附个例子

C/C++ code??12345678910111213141516void func(int*&){}void hanshu(int* const &){} int* licheng(){    static int temp;    return &temp;} int main(){    func(licheng());……


明白这个为什么不行了,但是我的问题还是没法解决。这道题老师要求:
Implement a tree class in whose code you should be sure to access tree nodes only through set and get method, make the child references to be private data members of the node class to insure that this happens. 
后面还说必须用递归实现。
所以在BSTNode类里面我写一个get函数
const BSTNode* getLeft()const
{
return this->left;
}
类里有private成员 BSTNode* left;
这样不行,因为insert函数中没法递归,怎么办呢?

[其他解释]
引用:
明白这个为什么不行了,但是我的问题还是没法解决。这道题老师要求:
Implement a tree class in whose code you should be sure to access tree nodes only through set and get method, make the child references to be private data members of the node class to insure that this happens. 
后面还说必须用递归实现。
所以在BSTNode类里面我写一个get函数
const BSTNode* getLeft()const
{
return this->left;
}
类里有private成员 BSTNode* left;
这样不行,因为insert函数中没法递归,怎么办呢?


没有很仔细看。

先问一下为什么不返回引用呢
BSTNode* &getLeft()
------其他解决方案--------------------


void BST::insert(BSTNode & n, BSTNode* t)
[其他解释]

引用:
引用:明白这个为什么不行了,但是我的问题还是没法解决。这道题老师要求:
Implement a tree class in whose code you should be sure to access tree nodes only through set and get method, make the child referen……

因为写成引用就报错:
BSTNode* & getLeft()const
{
return this->left;
}

In member function ‘BSTNode*& BSTNode::getLeft() const’:
bstnode.h:55:17: error: invalid initialization of reference of type ‘BSTNode*&’ from expression

插入的代码是:
void BST::insert(string n, BSTNode* & t)
{
if(t == NULL)
{
t=new BSTNode(n,NULL,NULL);
cout<<"Insert city "<<n<<" Succeed!"<<endl;
}
else if(n < t->name)
insert(n,t->left);
else if(n > t->name)
insert(n,t->right);
else
{
cout<<"Insert city "<<n<<" Succeed!"<<endl;
}
return;
}
但是left和right必须设置为private,该怎么办呢?
[其他解释]
引用:
引用:

BSTNode* &amp; getLeft()const // 题目要求这个 const 必须有?


没有,我习惯get后面都const一下,去掉就可以啦,十分感谢!

热点排行