我正在创建一个类,它是一组堆栈。我想使用迭代器在末尾获取元素并访问其函数。但是我得到以下错误
setOfStacks.cpp:40:6: error: expected ';' after expression
set< stack<Type> >::iterator it = mSetOfStacks.end();
^
;
该类使用模板并像这样声明
template<typename Type>
class SetOfStacks
{
public:
SetOfStacks(int capacityPerStack);
void push(Type object);
Type pop();
bool isEmpty();
private:
void createNewStackWithElem(Type object);
private:
int mStackCapacity;
set<stack<Type> > mSetOfStacks;
};
然后在我的插入函数中,我尝试在最后获取堆栈
set< stack<Type> >::iterator it = mSetOfStacks.end();
if( *it->size() < mStackCapacity )
*it->push(object);
这是我在尝试声明迭代器时遇到错误的地方 setOfStacks.cpp:40:6: 错误:应为“;”表达后
我也试过了
set<stack<Type> >::iterator it = mSetOfStacks.end();
但是还是不行
整个推送功能
template<typename Type>
void SetOfStacks<Type>::push(Type object) {
// if entire set is empty make a new stack
if( mSetOfStacks.empty() ) {
stack<Type> newStack;
newStack.push(object);
mSetOfStacks.insert(newStack);
}
else {
// check if current stack within limits
set< stack<Type> >::iterator it = mSetOfStacks.end();
if( *it->size() < mStackCapacity )
*it->push(object);
else {
// duplicate code, make another function
stack<Type> newStack;
newStack.push(object);
mSetOfStacks.insert(newStack);
}
}
}
最佳答案
在函数模板中,嵌套名称iterator
是一个从属名称,它被认为是一个对象而不是一个类型。您想要使用 typename
关键字来指示 iterator
是一种类型:
typename std::set<std::stack<Type> >::iterator it = mSetOfStacks.end();
// ^-- here
模板分两个阶段进行解析:在第一阶段,在不了解模板参数或实体的情况下解析代码的逻辑组件,具体取决于模板参数可能看起来像什么。如果存在依赖于模板参数的嵌套名称,编译器会假定此名称是对象而不是类型,除非您使用 typename
关键字明确声明它是类型。
关于c++ - 如何在 C++ 中为堆栈集声明 Iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20923792/