如何解决错误:“ <”标记之前的预期构造函数,析构函数或类型转换
|| 我对C ++相当陌生,但是已经获得了Java方面的经验。 在以下简短的c ++-exercise中,我尝试使用类模板构建堆栈。 不幸的是它无法编译,我不知道为什么。 错误消息是: Stack.cpp:6:错误:‘<’
令牌之前的预期构造函数,析构函数或类型转换
Stack.cpp:14:错误:‘<’
令牌之前的预期初始化程序
Stack.cpp:25:错误:‘<’
令牌之前的预期初始化程序
make [2]:* [build / Debug / GNU-Linux-x86 / Stack.o]错误1
这是Stack.h:
template <class T>
class Stack {
public:
Stack(int = 10);
~Stack() {
delete [] stackPtr;
}
int isEmpty()const {
return top == -1;
}
int isFull() const {
return top == size - 1;
}
int push(const T&);
int pop(T&);
private:
int size; // length i.e. number of elements on Stack.
int top; //index of top element
T* stackPtr;
};
Stack.cpp:
template <class T>
Stack<T>::Stack(int s) {
size = s > 0 && s < 1000 ? s : 15;
top = -1; // initialize stack
stackPtr = new T[size];
}
template <class T>
int Stack<T>::push(const T& item) {
if (!isFull()) {
stackPtr[++top] = item;
return 1; // push successful
}
return 0; // push unsuccessful
}
template <class T>
int Stack<T>::pop(T& popValue) {
if (!isEmpty()) {
popValue = stackPtr[top--];
return 1; // pop successful
}
return 0; // pop unsuccessful
}
main.cpp看起来像这样:
#include <iostream>
#include \"Stack.h\"
using namespace std;
int main(int argc,char** argv) {
Stack<int> intStack;
int i = 1.1;
cout << \"Pushing:\" << endl;
while (intStack.push(i)) {
cout << i << \' \';
i += 1;
}
cout << endl << \"Stack Full\" << endl
<< endl << \"Popping elements from is\" << endl;
while (intStack.pop(i))
cout << i << \' \';
cout << endl << \"Stack Empty\" << endl;
}
这是怎么了?
解决方法
我在Visual Studio 2010中按原样复制粘贴了您的代码,并且没有任何问题地对其进行编译和链接,因此,只要标头和cpp中的内容都放在一个位置即可(即,将它们都粘贴到main.cpp中)。同样,海湾合作委员会也没有抱怨。
将其拆分为标头和cpp之后,它仍然可以很好地编译,但是现在出现了链接器错误,原因在我在我的评论中提供的链接中得到了解释(此,这个C ++ FAQ链接也可能是有趣)。从语法上讲,就我和我的编译器而言,您的代码没有错。
我唯一能想到的是,看到您首先链接到pastebin,然后将完整的文件粘贴到头(然后在问题中进行了编辑),因此您从未将ѭ6包含在ѭ7中(我认为这可能是原因,因为
Stack.h
粘贴甚至具有包含防护)。尽管如此,基本问题仍然存在。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。