提问人:acalabash 提问时间:6/7/2022 更新时间:6/7/2022 访问量:50
神秘的“这个”g++ 要求 [重复]
Mysterious "this" g++ requirement [duplicate]
问:
如果创建模板类(或结构),然后从中继承定义类(结构),则可以使用以下代码:
template <typename T>
struct Par
{
T t;
};
struct Chl : public Par<int>
{
void setT(int in) { t = in; }
};
int main()
{
Chl c;
c.setT(1);
}
但是,如果你也制作一个模板,就像这样Chl
template <typename U>
struct Chl : public Par<U>
{
void setT(U in) { t = in; }
};
int main()
{
Chl<int> c;
c.setT(1);
}
编译器会给你一个错误:
error: ‘t’ was not declared in this scope
12 | void setT(U in) { t = in; }
为了避免这种情况,您必须按如下方式定义 setT:
void setT(U in) { this->t = in; }
只有这样,它才会编译。
因此,看起来模板化会产生一些额外的歧义,必须通过 来解决,但事实似乎并非如此(因为基本结构在所有情况下都具有相同的单个字段)。那么为什么有必要(至少在 g++ 中)呢?Chl
this
t
this
答: 暂无答案
评论
t
this->t
Par<U>