簡體   English   中英

打印std :: strings不會產生任何輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM