gpt4 book ai didi

c++ - 'using Base::func( )' in derived class makes ' func' 在派生类之外无法访问

转载 作者:行者123 更新时间:2023-11-30 01:07:18 34 4
gpt4 key购买 nike

这是 C++。我有以下程序:

#include <iostream>

using namespace std;

template <typename T>
class Base {
public:
T t;
void use() {cout << "base" << endl;};
};

template <typename T>
class Derived: public Base<T> {
using Base<T>::use;

public:
T x;
void print() { use(); };

};

using namespace std;

int main() {

Derived<float> *s = new Derived<float>();

s->Base<float>::use(); // this is okay
s->use(); // compiler complaints that "void Base<T>::use() is inaccessible"

s->print(); // this is okay

return 0;
}

Base::use() 不使用模板类型名 T。根据 Why do I have to access template base class members through the this pointer? ,我在 Derived 中使用了“using Base::use”,因此我可以在 Derived::print() 中将其称为“use”。但是,我不能再通过指向 Derived 的指针调用 use() 了。什么会导致这种情况?

最佳答案

你需要有线

using Base<T>::use;

Derivedpublic 部分。

template <typename T>
class Derived: public Base<T> {

public:
using Base<T>::use;
T x;
void print() { use(); };

};

Live demo .

关于c++ - 'using Base<T>::func( )' in derived class makes ' func' 在派生类之外无法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44766345/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com