【发布时间】:2018-01-13 04:49:33
【问题描述】:
我有两个模板声明如下:
template<typename T>
class A{
public:
T& getData();
//rest of public
private:
T& data;
//rest of private
};
template<typename T1, typename T2>
class B{
public:
using typAContainter = class std::list<shared_ptr<A<T1>>>;
B(int, T2&);
//rest of public
private:
typeAContainer C;
//rest of private
};
在 B 的构造函数定义中,我使用以下表达式(用于调试):
template<typename T1, typename T2> B<T1, T2>::B(int I, data& rData){
#ifdef DEBUG
auto iter = C.begin();
std::cout << (*(iter).get())->getData() << std::endl;
#endif
}
对于表达式(*(iter).get())->getData(),我得到以下编译错误:
error: no member named 'get' in 'std::__1::
__list_iterator<std::__1::shared_ptr<A<std::__1::basic_string<char> > >, void *>'
我的理解是*iter 应该给我一个shared_ptr<A<T1>> 类型的表达式。调用 get() 方法应该会获取一个 A<T1>* 类型的表达式(指向 A<T1> 的指针),然后我尝试使用 -> 运算符调用 getData() 方法。在构造上述表达式时,我也注意了运算符的优先级。
显然,我的理解存在一些缺陷。如果有人能指出这一点,我将不胜感激。
PS
【问题讨论】:
标签: compiler-errors c++14 shared-ptr stdlist