【发布时间】:2015-02-23 08:52:51
【问题描述】:
我正在尝试制作一个具有矢量特征的数据结构来学习一些 C++。我目前正试图编译类似这样的代码:
template<typename T>
class TestClass {
public:
T* data;
TestClass(const T& t) {
data = new T{ t };
}
~TestClass(void) {}
TestClass(const TestClass&) {}
T& operator[](int k) { return *data; }
const T& operator[](int k) const { return *data; }
class NestedClass {
public:
NestedClass(void) {}
~NestedClass(void) {}
T& operator*(void) { return operator[](0); }
};
NestedClass newNestedClass(void) {
return new NestedClass();
}
};
我在嵌套类中的operator* 函数上收到了对重载函数的模棱两可的调用。虽然我认为我得到了问题(编译器如何知道它的 rhs/lhs)我不完全确定如何解决它。我想为此使用operator[] 函数。
我希望这两条打印行打印完全相同的内容:
TestClass<int> t(1);
auto n = t.newNestedClass();
cout << t[0] << endl;
cout << *n << endl;
return 0;
有什么建议吗?
【问题讨论】:
-
问题是
operator[]不是NestedClass的成员。您必须自己提供一个对象参数。例如。保存指向TestClass的指针。 -
嵌套类只是一个单独命名空间中的普通类,外部类提供命名空间。除此之外,它与外部类没有特殊联系,就像(我认为)在 Java 中一样。
-
谢谢!我不熟悉这个概念。
标签: c++ operator-overloading nested-class ambiguity