gpt4 book ai didi

c++ - 错误 : expected constructor, 析构函数,或 ‘<’ token 之前的类型转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:33 26 4
gpt4 key购买 nike

我是 C++ 的新手,但已经获得了一些 Java 经验。

在接下来的简短 C++ 练习中,我尝试使用类模板构建堆栈。不幸的是,它无法编译,我也不知道为什么。

错误信息是:

Stack.cpp:6: error: expected constructor, destructor, or type conversion before ‘<’ token
Stack.cpp:14: error: expected initializer before ‘<’ token
Stack.cpp:25: error: expected initializer before ‘<’ token
make[2]: * [build/Debug/GNU-Linux-x86/Stack.o] Error 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;
};

堆栈.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 doesn't complain either .

在将它拆分为一个头文件和一个 cpp 之后,它仍然编译得很好,但是现在出现了链接器错误,我在评论中给出的链接中解释了错误的原因(thisthisthis C++ FAQ links might also be interesting)。从语法上讲,就我和我的编译器而言,您的代码没有任何问题。

我唯一能想到的是,看到您首先链接到 pastebin,在那里您将粘贴的完整文件(我当时在问题中编辑),是您从未将 Stack.h 包含在Stack.cpp(我认为这可能是原因,因为您的 Stack.h 粘贴甚至包含了防护)。尽管如此,根本问题仍然存在。

关于c++ - 错误 : expected constructor, 析构函数,或 ‘<’ token 之前的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6476777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com