[英]Printing std::strings produces no output
我正在為一個側面項目構建一個小模板堆棧類,它似乎正常工作。 但是,當我嘗試使用字符串時,它似乎不起作用。 我沒有編譯錯誤或警告。 我根本沒有輸出。 我在C ++中有點生疏,但我不希望被一個看起來很簡單的問題所阻擋。
我的主要功能(用於測試):
#include <iostream>
#include <fstream>
#include <string>
#include "myStack.h"
int main()
{
bool repeat = true;
int option = -1;
std::cout << "Option (1 - String | 2 - Integer) : ";
std::cin >> option;
std::cout << "\n";
switch (option)
{
case 1:
{
myStack<std::string> stringStack;
stringStack.push("!");
stringStack.push("there");
stringStack.push("Hello");
stringStack.show();
break;
}
case 2:
{
myStack<int> intStack;
intStack.push(3);
intStack.push(2);
intStack.push(1);
intStack.show();
break;
}
default:
break;
}
std::cout << "\n";
return 0;
}
我的堆棧類的相關部分:
#pragma once
template <typename T>
class myStack
{
private:
T *elements;
size_t capacity;
public:
myStack();
T top();
size_t size();
void push(T pushed);
void pop();
bool isEmpty();
void show(std::ostream &out = std::cout);
};
template <typename T>
myStack<T>::myStack()
{
this->elements = NULL;
this->capacity = 0;
}
template <typename T>
void myStack<T>::push(T pushed)
{
this->elements = (T *)realloc(this->elements, (this->capacity + 1) * sizeof(T));
this->elements[this->capacity] = pushed;
this->capacity++;
}
template<typename T>
void myStack<T>::show(std::ostream &out)
{
for (int i = this->capacity - 1; i >= 0; i--)
{
out << this->elements[i] << std::endl;
}
}
用於
this->elements = (T *)realloc(this->elements, (this->capacity + 1) * sizeof(T));
this->elements[this->capacity] = pushed;
管理std::string
的數組是不對的。 使用realloc
來分配內存是可以的。 但是,它不會正確初始化對象。 第二行是未定義行為的原因,因為對象未正確初始化。
如果允許使用std::vector
,請使用它。
template <typename T>
class myStack
{
private:
std::vector<T> elements;
...
};
然后,可以使用elements.size()
替換capacity
使用。
push
可以簡化為:
template <typename T>
void myStack<T>::push(T pushed)
{
this->elements.push_back(pushed);
}
你也必須相應地更新show()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.