为什么在使用 auto_ptr 样式类访问结构成员时会出现'unidentified identifier'?

Why do I get a 'unidentified identifier' when accessing a structure member using my auto_ptr style class?

本文关键字:identifier 成员 unidentified 结构 auto ptr 访问 样式 为什么      更新时间:2023-10-16

我正在使用C++模板来访问内存保存首选项。内存由句柄引用。为了锁定/解锁此内存,我编写了一个类似类auto_ptr的类模板。当我无法访问其中一个成员时,编译器会发出"无法识别的标识符"错误。

typedef struct
{
int value   ;
} PREFS ;
template <class T>
class PluginMem
{
private :
T       *ptr    ;
public :
T *
operator ->
(
)
{
return( ptr ) ;
}
} ;
typedef PluginMem<PREFS>    Prefs   ;
class   PluginContext
{
public :
template <class T>
T *
getNamedPreferences
(
const char  *prefsname
) ;
} ;
static void
test()
{
PluginContext   ctx ;
Prefs       *p  ;
p = ctx.getNamedPreferences<Prefs>( "test" ) ;
/*
*  unidentified identifier 'value'
*/
p->value = 0 ;
}

我希望能够在这里将 p>值更改为零。

这应该可以解决问题:

(*p)->value

你的p只是一个指针,你首先需要取消引用它,以便你可以使用你的类operator->

注意 - 如果要跳过取消引用部分,则需要按值复制Prefs并在没有指针符号的情况下使用它(如Prefs p(。请注意,您通常写auto_ptr<foobar> baz而不是auto_ptr<foobar> * baz