【发布时间】:2020-01-25 16:11:34
【问题描述】:
我正在编写一个通用的 Vector 类,我希望 Vector3 类从 Vector 继承。 Vector 的数据可以是任意长度,Vector3 的数据长度为 3。所以我想为 Vector3 创建一个不同的构造函数来访问 Vector 的数据和长度。对于这个问题,我简化了代码。
#include <iostream>
template <typename T>
class A {
protected:
T value;
public:
A()
: value(0)
{};
A(T value)
: value(value)
{};
~A ()
{};
T get_value()
{
return value;
}
};
template <typename T>
class B : public A<T> {
public:
B()
: A<T>(3)
{};
T test()
{
return value; // error: 'value' was not declared in this scope
}
};
正如我所说,我想访问子类“B”中的“值”,但是我收到了错误通知
错误:“值”未在此范围内声明
但是根据 c++ 网站 (http://www.cplusplus.com/doc/tutorial/polymorphism/) 我应该能够访问“价值”。
为什么会这样,更重要的是,我该如何解决?
【问题讨论】:
-
您在 C++ 上下文中错误地使用了术语 attributes。
-
我强烈推荐阅读dependent_name。一开始可能很难阅读,但是当您不仅要寻找快速解决方案,而且要真正了解名称的查找方式时,它确实很有用,尤其是。处理模板时。
标签: c++ class templates attributes polymorphism