将堆栈传递到功能

Passing Stack to Function

本文关键字:功能 堆栈      更新时间:2023-10-16

,所以我正在玩堆栈,并且在主要功能中填写了一个,但是现在我想将其传递给其他功能,以便可以穿越它。我不确定将哪种数据类型放入原型中,以便它接受它。建议?这是我所拥有的:

main.cpp

#include <iostream>
using namespace std;
#include "stack.h"
void displayStack(char &stackRef);
int main()
{
    Stack<char> stack;
    stack.push('a');
    stack.push('b');
    stack.push('c');
    return 0;
};
void displayStack(char starRef)
{
    // Cannot Get here - Errors!
};

这是在告诉我我有太多参数,并且不符合参数列表。

这应该足够:

void displayStack(const Stack<char>& stack);

名称 DisplayStack表示该函数仅显示堆栈,而不会以任何方式更改它。因此,该参数可以是引用const 。但是,名称中的后缀Stack是多余的

#include <iostream>
using namespace std;
#include "stack.h"
typedef Stack< char > CharStack;
void display( CharStack const& stack )
{
    // ... Display the stack
}
int main()
{
    CharStack stack;
    for( auto const ch : { 'a', 'b', 'c' } )
    {
        stack.push( ch );
    }
    display( stack );
}

请注意&Hellip;

  • 该功能已移动 main。那时不需要愚蠢的纯声明,更少的工作。不要重复自己

  • 函数定义后的不正确的半洛子已被删除。好吧,至少我认为它们不正确。无论它们是否是完全多余的。

  • main中的多余return 0;已被删除,因为那是默认值。但是,有些程序员更喜欢明确。

缺点,而C 11循环用G 4.7.2很好地编译时,它会导致内部编译器错误( ICE ),并带有Visual C 11.0:

[D: dev  test]>  cl foo.cpp foo.cppfoo.cpp(7):警告C4100:'stack':未引用的正式参数foo.cpp(16):错误C2059:语法错误:'{'foo.cpp(16):错误C2143:语法错误:丢失';'前 '}'C1XX:致命错误C1063:内部编译器错误         请在Visual C   上选择技术支持命令         帮助菜单,或打开技术支持帮助文件以获取更多信息[D: dev  test]> _

哦。

做到这一点。; - )

编译器错误向Microsoft报告。

如果您不想修改函数内的堆栈内容:

void displayStack(const Stack<char> &starRef)

如果要修改函数内堆栈的内容:

void displayStack(Stack<char> &starRef)

注意:

  • 所传递的变量的类型必须是您在函数原型中提到的 type
  • 在c/c 中,默认情况下,函数的所有参数均通过copy 传递,即:参数而不是参数本身的副本将传递给函数。开销是副本。您通过Reference 通过,以避免传递变量副本的开销。
  • 如果您希望传递的变量在函数中不变,则在参数上使用const限定符。

将您的DisplayStack函数更改为:

void displayStack(Stack<char> &stackRef)