我正在编写一个需要堆栈的程序。我声明堆栈然后是一个不相关的类。但我不明白为什么程序不起作用?
这是我的堆栈:
template <class T>
class stack :public base<T>
{
private:
T *stackarray;
int top;
int stacksize;
int arraysize;
public:
stack(int);
void push(T);
template <class T>
stack<T>::stack(int x)
{
arraysize = x;
stackarray = new T[arraysize];
top = -1;
stacksize = 0;
}
template <class T>
void stack<T>::push(T a)
{
if (top < arraysize - 1)
{
top++;
*(stackarray + top) = a;
stacksize++;
}
else
return 0;
}
这是我无关的课程:
class unrelated {
private:
string str;
public:
void set(string);
string get();
friend ostream &operator<<(ostream& output, unrelated &b)
{
output << b.get();
return output;
}
};
void unrelated::set(string y)
{
str = y;
}
string unrelated::get()
{
return str;
}
现在我将这两行添加到我的主函数中:
stack<unrelated> unrelated_stk(20);
unrelated_stk.push('h');
我派生了&#34; unrelated_stk&#34;我认为第二行应该没有问题,因为已经在堆栈中声明了push方法。但它不起作用,它在c :: B
中读取此错误错误:没有匹配函数来调用&#39; stack :: push(char)&#39; |
我应该重新声明&#34;推&#34;方法&#34;无关&#34;类。但这没有意义。我的问题是什么?
答案 0 :(得分:3)
问题是T
变为unrelated
而不是char
,因此push
方法将unrelated
对象作为其参数,而不是char
1}}。
答案 1 :(得分:1)
在unrelated_stk.push('h');
行中,您推送char
而不是unrelated
。请注意,它是char
,而不是文字字符串,因为您使用了单引号。由于unrelated
没有带char
的构造函数(它根本没有构造函数!),编译器不知道如何从unrelated
创建char
function boom($item, $i, $z )
{
print_r("\n".$item);
print_r("\n".$z[$i]);
}
$z=[ "alpha", "bravo" ];
$x=[ "one", "two" ];
array_walk( $x, 'boom', $z );
因此它不知道该怎么做。