You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在模板友元函数中获取对象指针?编译错误求助

解决友元模板函数中获取对象指针的编译错误

我来帮你搞定这个头疼的编译问题!你遇到的错误根源在于模板函数里调用GetSelfPtr()的方式不对,编译器没法定位到这个类的私有成员函数。

错误原因分析

先看你templt.h里的代码:

template <typename some_type_t>
void foo(some_type_t &val)
{
    GetSelfPtr()->x;
}

这里直接写GetSelfPtr(),编译器会默认把它当成全局函数去查找,但全局作用域里根本没有这个函数。虽然foo是A和B的友元,但编译器不知道这个函数属于some_type_t类——因为你的调用没有和模板参数some_type_t关联起来,它不会主动去对应类的作用域里找这个成员函数,这就导致了编译报错。

修复方案

只需要通过传入的val对象来调用GetSelfPtr()就行!这样编译器会明确知道这个函数是val所属类的成员,会去A或B的作用域里查找,而且因为foo是友元,完全有权限访问这个私有函数。

修改后的templt.h代码如下:

template <typename some_type_t>
void foo(some_type_t &val)
{
    val.GetSelfPtr()->x;
}

补充说明

别想着用this哦——foo是全局模板函数,不是类的成员函数,所以不能直接用this指针。必须通过传入的对象实例来调用类的成员函数。修改后编译就能正常通过啦!

内容的提问来源于stack exchange,提问作者HeyHo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:54:03