【发布时间】:2016-01-25 19:30:52
【问题描述】:
我有一个类模板Foo,其成员函数如下:
bool contains(const T& item) const
我已经用指针类型实例化了它:Foo<Bar*>,这让我期待成员函数现在具有以下签名:
bool contains(const Bar*& item) const
在constBar 成员函数中,我尝试将this 传递给Foo<Bar*>::contains:
bool Bar::func(const Foo<Bar*>& foo) const
{
return foo.contains(this);
}
编译失败,报错:
错误:从“
const Bar*”到“Bar*”的转换无效
问题:
- 为什么我的
const T&参数不是 const 正确的? - 需要
Foo<T>::contains(...) const的什么签名才能允许使用this调用编译?
完整示例:
#include <vector>
#include <algorithm>
template<typename T>
struct Foo
{
bool contains(const T& item) const
{
return false;
}
};
struct Bar
{
bool func(const Foo<Bar*>& foo) const
{
return foo.contains(this);
}
};
错误输出:
scratch/main.cpp:17:33: error: invalid conversion from ‘const Bar*’ to ‘Bar*’ [-fpermissive]
return foo.contains(this);
^
scratch/main.cpp:7:10: note: initializing argument 1 of ‘bool Foo<T>::contains(const T&) const [with T = Bar*]’
bool contains(const T& item) const
【问题讨论】:
标签: c++ pointers compiler-errors constants