声明不相关的类但它无法正确运行

时间:2016-03-18 17:04:28

标签: c++

我正在编写一个需要堆栈的程序。我声明堆栈然后是一个不相关的类。但我不明白为什么程序不起作用?

这是我的堆栈:

    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;类。但这没有意义。我的问题是什么?

2 个答案:

答案 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 ); 因此它不知道该怎么做。