0

キューのコードを書きました。

#include <iostream>
using namespace std;

struct q
        {
            int items[10];
            int front,rear;
        } queue;

void Addqueue(struct q *queue, int item)
{
    if (queue->rear==9)
        cout << "Queue is Full.";
    else
        queue->items[++queue->rear]=item;
}


int main()
{
    queue.front=queue.rear=-1;
    Addqueue(q *queue,5);
    return 0;
}

ご覧のとおり、構造体オブジェクトを使用しています。Addqueue 関数では、最初の要素は (struct q *queue) です。メイン関数でこの関数を呼び出しているときに、代わりに何を書くべきか知りたいです。たとえば、Addqueue(q *queue,5) をテストし、 Addqueue(queue,5) と Addqueue(*queue,5) と Addqueue(struct q *queue,5) ですが、どれも機能せず、この行でエラーが発生します。それで、私は何をすべきですか?なにが問題ですか?

4

3 に答える 3

1

正しい構文はAddqueue(&queue, 5)です。Addqueueはへのポインタを受け入れるため、渡すにはaddress-ofを使用してのアドレスstruct qを取得する必要があります。queueoperator&

std::queue<int>とは言うものの、あなたはあなた自身の自家製のキューの代わりに絶対に使うべきです。

于 2012-11-03T18:00:33.160 に答える
1
#include <iostream>
using namespace std;

struct q
{
    int items[10];
    int front,rear;
} queue;

void Addqueue(q *queue, int item)
{
    if (queue->rear==9)
        cout << "Queue is Full.";
    else
        queue->items[++queue->rear]=item;
}


int main()
{
    queue.front=queue.rear=-1;
    Addqueue(&queue, 5);
    return 0;
}

それは正しい方法です。

于 2012-11-03T18:03:33.843 に答える
1

struct へのポインタを作成しましqたが、メモリが割り当てられていません。そしてポインタのローカル名はq *queueあなたのオブジェクトをオーバーライドしますqueue

于 2012-11-03T18:06:30.630 に答える