C++ 模板类默认构造函数失败

标签 c++ templates constructor

所以我正在为 C++ 中的赋值创建 Stack 类。作业的核心是让我们熟悉模板。我一遍又一遍地阅读我的书,并在此处逐个问题地查看。

我需要让我的 Stack 类能够被构建

Stack s2;

但是当我编译我的 test.cpp 时出现错误并且只能在我构造为时编译

Stack<T> s1;

其中 Tstd::stringint 等。如何构建我的堆栈以便我可以使用两个构造函数?


堆栈.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/

相关文章:

c++ - 奇怪的家长 ID

c++函数返回一个枚举?

具有可变通用引用和复制构造函数的 c++11 构造函数

c++ - 以下模板代码的奇怪行为

c++ - 我在 IDA 或 dbg 或 olly 上看到的内存是否与我在 RAM 上实时加载的内存相同?

C++ 重载赋值运算符 : "cannot convert ` B *` to ` A *`" error

c++ - 是否可以在模板化函数签名中使用 typedef?

php - 向构造函数注入(inject)多个参数是不好的做法吗?

Javascript:是否允许在构造函数中调用方法/函数?

JavaScript 构造函数的实例是函数