所以我正在为 C++ 中的赋值创建 Stack 类。作业的核心是让我们熟悉模板。我一遍又一遍地阅读我的书,并在此处逐个问题地查看。
我需要让我的 Stack 类能够被构建
Stack s2;
但是当我编译我的 test.cpp 时出现错误并且只能在我构造为时编译
Stack<T> s1;
其中 T
是 std::string
、int
等。如何构建我的堆栈以便我可以使用两个构造函数?
堆栈.cpp
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <string>
using namespace std;
template<typename T>
class Stack {
public:
Stack();
void Push(T val);
T Pop();
void Print();
private:
vector<T> vecT;
};
template <typename T>
Stack<T>::Stack() { }
template <typename T>
void Stack<T>::Push(T val) { vecT.push_back(val); }
template <typename T>
T Stack<T>::Pop() { vecT.pop_back(); }
template <typename T>
void Stack<T>::Print() {
cout << "[ ";
for(int i=0; i<vecT.size(); i++) {
cout << vecT[i] << " ";
}
cout << "]";
}
测试.cpp
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <string>
#include "Stack.cpp"
using namespace std;
int main() {
Stack<string> s1;
s1.Push("values1");
s1.Push("values2");
s1.Print();
Stack s2;
s2.Push("values1");
s2.Push("values2");
s2.Print();
}
最佳答案
默认模板参数怎么样?
template<typename T = std::string>
class Stack {
不管怎样
Stack<T> s1;
和
Stack s2;
您没有使用不同的构造函数;在这两种情况下,您都使用相同的默认(无参数)构造函数。
关于C++ 模板类默认构造函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44639462/