使用auto_ptr样式类访问结构成员时,为什么会得到“身份不明的标识符”?

时间:2019-10-20 19:37:01

标签: c++ templates

我正在使用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-> value更改为零。

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

(*p)->value

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

注意-如果要跳过解除引用的部分,则需要按值复制Prefs并使用不带指针标记的值(例如Prefs p)。请注意,您通常写auto_ptr<foobar> baz而不是auto_ptr<foobar> * baz