错误:"<"标记之前的预期构造函数、析构函数或类型转换
error: expected constructor, destructor, or type conversion before ‘<’ token
我是C++的新手,但已经在java方面获得了一些经验。
在下面的简短的c++练习中,我尝试使用类模板构建一个堆栈。不幸的是,它未能编译,我不知道为什么。
错误消息为:
Stack.cpp:6:错误:
‘<’
标记之前需要构造函数、析构函数或类型转换
Stack.cpp:14:错误:‘<’
令牌之前应为初始值设定项
Stack.cpp:25:错误:‘<’
令牌之前应为初始值设定项
make[2]:*[build/Debug/GNU-Linux-x86/Stack.o]错误1
这是堆栈。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中原样复制粘贴了您的代码,并且编译和链接时没有任何问题,只要header和cpp中的内容都在一个位置(即,都粘贴在main.cpp中)。同样,GCC也没有抱怨。
在将它分解为一个标头和一个cpp之后,它仍然编译得很好,但现在出现了链接器错误,我在评论中给出的链接中解释了这些错误的原因(这个和这个,这个C++常见问题链接可能也很有趣)。从语法上讲,就我和我的编译器所见,您的代码没有任何问题。
我唯一能想象的是,看到你第一次链接到粘贴的完整文件(我当时在问题中编辑了它)的pastebin,你从未在Stack.cpp
中包含Stack.h
(我认为这可能是原因,因为你的Stack.h
粘贴甚至有include guard)。不过,根本问题仍然存在。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- new[] / delete[] 并在C++中抛出构造函数/析构函数
- 创建/向容器添加对象时如何使用构造函数/析构函数
- LNK2019构造函数/析构函数使用 C++ Dll
- 有人可以解释一下这里发生了什么(类和构造函数/析构函数)吗?
- 带智能ptr的Pimpl-为什么需要构造函数/析构函数
- 需要构造函数/析构函数/类型转换错误
- Boost共享指针构造函数/析构函数
- 通过值或引用调用时未调用构造函数/析构函数.不管怎样
- C++构造函数析构函数中的奇怪行为
- 构造函数/析构函数链接错误
- 在模板化函数中调用具有特征的显式构造函数/析构函数
- c++构造函数/析构函数
- 为什么赋值的成本不能保证小于构造函数-析构函数对
- 重写默认构造函数/析构函数而不实现它们
- 使用自定义分配器调用对象构造函数/析构函数
- 涉及类和结构的构造函数/析构函数
- 在抽象构造函数/析构函数中调用纯虚拟函数安全吗
- 如果在没有限定的情况下从构造函数/析构函数调用虚拟函数,则是否会发生虚拟调度
- C++基于堆栈的构造函数/析构函数无法按预期工作