- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当我尝试编译下面给出的示例代码时,在 g++(4.6 版)中出现以下错误:
~/tmp/iterator_tmp$ g++ -ansi -Wall iteg.cpp -o iteg
iteg.cpp:115:11: error: ‘ptrdiff_t’ does not name a type
iteg.cpp: In instantiation of ‘CMyItr<CMyBuff<double>, double>’:
/usr/include/c++/4.6/bits/stl_iterator_base_types.h:166:53: instantiated from ‘std::iterator_traits<CMyItr<CMyBuff<double>, double> >’
/usr/include/c++/4.6/bits/stl_iterator.h:97:11: instantiated from ‘std::reverse_iterator<CMyItr<CMyBuff<double>, double> >’
iteg.cpp:204:40: instantiated from here
iteg.cpp:21:46: error: no type named ‘difference_type’ in ‘CMyItr<CMyBuff<double>, double>::BuffType {aka class CMyBuff<double>}’
然而,该示例在 g++ 4.4 中编译良好,就像在 Visual Studio 2010 中一样。有人可以指出我在这里做错了什么吗?
在g++ 4.6和4.4的两种情况下,我使用的两条命令分别如下。
g++ -ansi -Wall iteg.cpp -o iteg
g++-4.4 -ansi -Wall iteg.cpp -o iteg
谢谢。
代码示例:
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
#include <memory>
#include <iostream>
#include <iterator>
template < typename T, typename elem_type=typename T::value_type>
class CMyItr {
public:
typedef T BuffType;
typedef CMyItr<T> self_type;
typedef CMyItr<self_type, elem_type> iterator;
typedef typename std::bidirectional_iterator_tag iterator_category;
typedef typename BuffType::value_type value_type;
typedef typename BuffType::size_type size_type;
typedef typename BuffType::pointer pointer;
typedef typename BuffType::const_pointer const_pointer;
typedef typename BuffType::reference reference;
typedef typename BuffType::const_reference const_reference;
typedef typename BuffType::difference_type difference_type;
CMyItr( BuffType *pB, size_type pos):
PtrItr_(pB), PtrPos_(pos){
};
friend class CMyItr< const T, const elem_type>;
elem_type &operator*(){
return (*PtrItr_)[PtrPos_];
};
elem_type *operator->(){
return &(operator*());
};
self_type & operator++(){
++PtrPos_;
return *this;
};
self_type operator++(int){
self_type tmp(*this);
++(*this);
return tmp;
};
self_type operator+(difference_type n) {
self_type tmp(*this);
tmp.PtrPos_ = tmp.PtrPos_ + n;
return tmp;
};
self_type &operator+=(difference_type n){
PtrPos_ = PtrPos_ + n;
return *this;
};
self_type & operator--(){
--PtrPos_;
return *this;
};
/*!
The decrement operator which decrements the position index.
*/
self_type operator--(int){
self_type tmp(*this);
--(*this);
return tmp;
};
self_type operator-(difference_type n) {
self_type tmp(*this);
tmp.PtrPos_ = tmp.PtrPos_ - n;
return tmp;
};
self_type &operator-=(difference_type n){
PtrPos_ -= n;
return *this;
};
bool operator!=(const self_type &other) const {
return PtrPos_ != other.PtrPos_ && PtrItr_ == other.PtrItr_;
};
bool operator==(const self_type &other) const {
return PtrPos_ == other.PtrPos_ && PtrItr_ == other.PtrItr_;
};
private:
BuffType * PtrItr_;
size_type PtrPos_;
};
//----------------------------------------------------------------------//
//----------------------------------------------------------------------//
template < typename T > class CMyBuff {
public:
enum {default_size = 4 };
typedef CMyBuff<T> self_type;
typedef T value_type;
typedef T & reference;
typedef const T & const_reference;
typedef T * pointer;
typedef const T * const_pointer;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef CMyItr<self_type> iterator;
typedef CMyItr<const self_type> const_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const iterator> const_reverse_iterator;
/*! Starting for forward iterator.*/
iterator begin(){
return iterator(this, 0);
};
/*! Forward iterator should go till here.*/
iterator end(){
return iterator(this, Size_);
};
/*! Starting for constant forward iterator.*/
const_iterator begin() const {
return const_iterator(this, 0);
};
/*! Constant forward iterator should go till here.*/
const_iterator end() const {
return const_iterator(this, Size_);
};
/*! Reverse iterator starts from here.*/
reverse_iterator rbegin(){
return reverse_iterator(end());
}
/*! Reverse iterator end.*/
reverse_iterator rend() {
return reverse_iterator(begin());
}
/*! Constant reverse iterator starting point.*/
const_reverse_iterator rbegin() const {
return const_reverse_iterator(end());
}
/*! Constant reverse iterator should end here.*/
const_reverse_iterator rend() const {
return const_reverse_iterator( begin());
}
/* Ctor for my buffer*/
explicit CMyBuff(size_type capacity = default_size):
Ptr_(NULL),
Size_(capacity) {
Ptr_ = new value_type [sizeof(value_type) * Size_];
Ptr_[0] = 0;
Ptr_[1] = 1;
Ptr_[2] = 8;
Ptr_[3] = 27;
};
~CMyBuff() {
delete [] Ptr_;
}
reference operator[](size_type i){
return rAtUnChecked(i);
};
const_reference operator[](size_type i) const {
return rAtUnChecked(i);
};
size_type size() const {
return Size_;
};
reference rAtUnChecked(size_type k) const {
return Ptr_[k];
};
private:
pointer Ptr_;
size_type Size_;
};
//------------------------------------------------------------------//
//----------------------------------------- MAIN ------------------//
// Use the following command line to compile:
// g++-4.4 -ansi -Wall -std=c++0x mybuffer.cpp -o mybuffer
int main(){
CMyBuff<double> Buffer;
CMyBuff < double >::reverse_iterator RItr = Buffer.rbegin();
//prints last but one element
std::cout << *(++RItr) << std::endl;
return 0;
}
//---------------------------------------------------------------------------//
最佳答案
ptrdiff_t
在 <stddef.h>
中定义.添加#include <stddef.h>
到你的代码的顶部,你会没事的。
在 C++ 中,允许但不要求系统头文件包含其他系统头文件。
更新:#include <cstddef>
也可以,但是你必须使用 std::ptrdiff_t
.
关于c++ - g++ 4.6 提示迭代器类型不同。 g++ 4.4 和 Visual Studio 没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6727193/
如果您有超过 1 个具有相同类名的(动态)文本框,并使用 jquery 循环遍历每个所述文本框,您是否可以假设每次选择文本框的顺序都是相同的? 示例: 文本框 1 值 = 1文本框 2 值 = 2文本
有人知道为什么这段代码无法顺利运行吗?它似乎不喜欢使用yield关键字进行迭代:我正在尝试从任何级别的列表或字典中挖掘所有数字(对列表特别感兴趣)。在第二次迭代中,它找到 [2,3] 但无法依次打印
我关于从 mysql 数据库导出数据并将其保存到 Excel 文件(多表)的创建脚本。我需要让细胞动态基因化。该脚本正确地显示了标题,但数据集为空。当我“回显”$value 变量时,我检查了数据是否存
我正在尝试在 Python 中运行模拟,由此我绘制了一个数组的随机游走图,给定了两个变量参数的设定水平。 但是,我遇到了一个问题,我不确定如何迭代以便生成 250 个不同的随机数以插入公式。例如我已经
我是学习 jquery 的新手,所以如果这是一个相对简单的问题,我深表歉意。我有一个 ID 为 ChartstoDisplay 的 asp.net 复选框列表。我正在尝试创建 jquery 来根据是否
我正在尝试根据在任意数量的部分中所做的选择找出生成有效案例列表的最佳方法。也许它不是真正的算法,而只是关于如何有效迭代的建议,但对我来说这似乎是一个算法问题。如果我错了,请纠正我。实现实际上是在 Ja
如果我使用 sr1 为 www.google.com 发送 DNSQR,我会收到几个 DNSRR(s) 作为回复,例如(使用 ans[DNSRR].show() 完成): ###[ DNS Resou
假设有这样一个实体类 @Entity public class User { ... public Collection followers; ... } 假设用户有成千上万的用户关注者。我想分页..
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: Nested jQuery.each() - continue/break 这是我的代码: var steps =
我刚从 F# 开始,我想遍历字典,获取键和值。 所以在 C# 中,我会说: IDictionary resultSet = test.GetResults; foreach (DictionaryEn
我知道已经有很多关于如何迭代 ifstream 的答案,但没有一个真正帮助我找到解决方案。 我的问题是:我有一个包含多行数据的txt文件。 txt 文件的第一行告诉我其余数据是如何组成的。例如这是我的
我有 12 个情态动词。我想将每个模态的 .modal__content 高度与 viewport 高度 进行比较,并且如果特定模态 .modal__content 高度 vh addClass("c
在此JSFiddle (问题代码被注释掉)第一次单击空单元格会在隐藏输入中设置一个值,并将单元格的背景颜色设置为绿色。单击第二个空表格单元格会设置另一个隐藏输入的值,并将第二个单元格的背景颜色更改为红
这是一个非常具体的问题,我似乎找不到任何特别有帮助的内容。我有一个单链表(不是一个实现的链表,这是我能找到的全部),其中节点存储一个 Student 对象。每个 Student 对象都有变量,尽管我在
有没有办法迭代 IHTMLElementCollection? 比如 var e : IHTMLLinkElement; elementCollection:IHTMLElementCollect
我正在尝试用 Java 取得高分。基本上我想要一个 HashMap 来保存 double 值(因此索引从最高的 double 值开始,这样我更容易对高分进行排序),然后第二个值将是客户端对象,如下所示
我想在宏函数中运行 while/until 循环,并限制其最大迭代次数。我找到了如何在“通常”sas 中执行此操作: data dataset; do i=1 to 10 until(con
Iterator iterator = plugin.inreview.keySet().iterator(); while (iterator.hasNext()) { Player key
晚上好我有一个简单的问题,我警告你我是序言的新手。假设有三个相同大小的列表,每个列表仅包含 1、0 或 -1。我想验证对于所有 i,在三个列表的第 i 个元素中,只有一个非零。 此代码针对固定的 i
我在 scheme 中构建了一个递归函数,它将在某些输入上重复给定函数 f, n 次。 (define (recursive-repeated f n) (cond ((zero? n) iden
我是一名优秀的程序员,十分优秀!