与涉及 shared_ptr 列表的表达式相关的编译器错误

Compiler error related to expression involving list of shared_ptr

我有两个模板声明如下:

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> 的指针),在该表达式上我尝试使用 [=20= 调用 getData() 方法] 操作员。我在构造上述表达式时也注意了运算符的优先级。

显然,我的理解存在一些缺陷。如果有人能指出这一点,我将不胜感激。

PS

我认为您误读了一些关于 operator precedence 的内容,并且错放了 *(iter) 中的括号。

表达式 *(iter).get() 等于 *((iter).get())(这又等于 *(iter.get()))。也就是说,您尝试在迭代器上使用 . 成员访问运算符,然后取消引用 get() returns。这两者通常都不起作用。

iter->get()(*iter).get()