所以我正在玩堆栈,我已经在我的主函数中填充了一个,但是现在我想把它传递给我的其他函数,所以我可以遍历它。我不确定将什么类型的数据类型放入原型中以便它接受它。建议?这就是我所拥有的:
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!
};
它告诉我我有太多的参数,它与参数列表不匹配。
答案 0 :(得分:7)
这应该足够了:
void displayStack(const Stack<char>& stack);
答案 1 :(得分:3)
名称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 );
}
请注意......
该功能已移至上方 main
。那时不需要愚蠢的纯粹宣言,减少工作量。 DRY :不要重复自己。
删除了函数定义后的错误分号。好吧,至少我认为他们是不正确的。无论它们是否存在,它们都是多余的。
return 0;
中多余的main
已被删除,因为是默认。但是,有些程序员喜欢明确说明。
在缺点方面,虽然C ++ 11循环与g ++ 4.7.2编译得很好,但它会导致Visual C ++ 11.0的内部编译器错误( ICE ):
[d:\dev\test] > cl foo.cpp foo.cpp foo.cpp(7) : warning C4100: 'stack' : unreferenced formal parameter foo.cpp(16) : error C2059: syntax error : '{' foo.cpp(16) : error C2143: syntax error : missing ';' before '}' c1xx : fatal error C1063: INTERNAL COMPILER ERROR Please choose the Technical Support command on the Visual C++ Help menu, or open the Technical Support help file for more information [d:\dev\test] > _
哦,好吧。
按照自己的方式行事。 ; - )
编译器错误reported to Microsoft。
答案 2 :(得分:0)
将您的displayStack功能更改为:
void displayStack(Stack<char> &stackRef)
答案 3 :(得分:0)
如果您不想在函数内修改堆栈的内容:
void displayStack(const Stack<char> &starRef)
如果要在函数内修改堆栈的内容:
void displayStack(Stack<char> &starRef)
注意事项:
const
限定符。