Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+中的模板化基类中查找名称+; 我正在阅读有效的C++第三版,第43条“知道如何访问模板化基类中的名字”。_C++_Class_Templates_Base Class_Name Lookup - Fatal编程技术网

在C+中的模板化基类中查找名称+; 我正在阅读有效的C++第三版,第43条“知道如何访问模板化基类中的名字”。

在C+中的模板化基类中查找名称+; 我正在阅读有效的C++第三版,第43条“知道如何访问模板化基类中的名字”。,c++,class,templates,base-class,name-lookup,C++,Class,Templates,Base Class,Name Lookup,编译器默认不在模板化基类中查找名称。 但为什么我告诉他们他们还是不做 但为什么我告诉他们他们还是不做 因为没有使用成员函数Foo,所以根本没有使用 这适用于类模板的成员:除非该成员在程序中使用,否则它不会实例化,也不需要定义 如果调用了Foo,您可能会得到一个 D<int> d; d.Foo(); D; d、 Foo(); 顺便说一句 但它没有抱怨i在B中是私有的 因为可访问性检查是在名称查找之后执行的。未找到名称i,则无法检查任何内容的可访问性 template<type

编译器默认不在模板化基类中查找名称。 但为什么我告诉他们他们还是不做

但为什么我告诉他们他们还是不做

因为没有使用成员函数
Foo
,所以根本没有使用

这适用于类模板的成员:除非该成员在程序中使用,否则它不会实例化,也不需要定义

如果调用了
Foo
,您可能会得到一个

D<int> d;
d.Foo();
D;
d、 Foo();
顺便说一句

但它没有抱怨
i
B
中是私有的

因为可访问性检查是在名称查找之后执行的。未找到名称
i
,则无法检查任何内容的可访问性

template<typename T>
class B {
};

template<typename T>
class D: public B<T> {
public:
    void Foo() {
        T a = B<T>::i;
    }
};

int main() {
    D<int> d;
}
D<int> d;
d.Foo();