- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
声明:这个问题是关于以下演示的 using 语句存在的错误。我知道在 SO 上还有其他类似的问题,但没有一个回答了我的具体问题。而且我知道如何在没有 using 语句的情况下使其工作。
在我的头文件中:
class MyClass
{
public:
class MyIterator
{
public:
MyIterator& operator++(int);
private:
static const MyIterator END;
};
...
};
在我的实现文件(.cc 文件)中:
using ::MyClass; //**QUESTION: I've already used the class, why did the nested MyIterator class not get recognized?** EDIT: excuse my English, I can't write - by I've already used, I mean, I've already told the compiler "using that class"
// the following line is the definition of the static const object
const MyIterator MyIterator::END = MyIterator(); //error: ‘MyIterator’ does not name a type
MyIterator& MyIterator::operator++(int) //error: ‘MyIterator’ does not name a type
{
...
}
正如我在评论中所说 - 问题:我已经使用过该类,为什么嵌套的“MyIterator”类没有被识别? ---更正:我已经告诉编译器“使用类”,为什么...
非常感谢。
编辑:非常感谢您指出常量差异;复制粘贴时出错;已更正。
请注意,引入 using 语句的目的是在实现成员函数(在本例中为运算符重载)时摆脱完全限定名称。因此,请不要提出这样的建议。
最佳答案
using::MyClass
在这里没有效果。命名空间/ block 作用域中的 using 声明将另一个命名空间的成员引入当前命名空间,避免使用命名空间限定符。但在您的情况下,两个命名空间是相同的:全局命名空间
这种声明的经典用法是:
#include <iostream>
#include <string>
using std::string;
int main()
{
string str = "Example";
using std::cout;
cout << str;
}
在您的情况下,您可以使用 typedef :
typedef MyClass::MyIterator MyIterator;
或者在 C++11 中,您可以使用 namespace 别名:
using MyIterator = MyClass::MyIterator
您可以为您的定义使用完整的限定名称(并删除 using
):
MyClass::MyIterator& MyClass::MyIterator::operator++(int)
{
// ...
}
我发现它更清楚了,因为当读者看到它时,它知道 MyIterator
是 MyClass
的嵌套类型,无需阅读和浏览 using 声明。
注意:
operator++
的定义是 const,但您的声明不是:这是一个错误。关于c++ - 嵌套迭代器类不命名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27759886/
我刚开始使用 Dagger 2,想知道与我目前用来实现依赖注入(inject)的技术相比,它有什么优势。 目前,为了实现 DI,我创建了一个具有两种风格的项目:mock 和 prod。在这些风格中,我
我是一名优秀的程序员,十分优秀!