سؤال

لديّ مهمة منزلية حيث يتم توفير ملف الرأس إلينا ، ولا يمكن تغييره. أواجه مشكلة في معرفة كيفية استخدام وظيفة "العرض" بشكل صحيح ، لذا فإليك الرمز ذي الصلة.

ملف الرأس:

#ifndef SET_
#define SET_

typedef int EType;

using namespace std;

#include <iostream>

class Set
{
  private:

    struct Node
    {
      EType Item;     // User data item
      Node * Succ;    // Link to the node's successor
    };

    unsigned Num;     // Number of user data items in the set
    Node * Head;      // Link to the head of the chain

  public:

    // Various functions performed on the set

    // Display the contents of the set
    //
    void display( ostream& ) const;

};

#endif

إليكم تنفيذ وظيفة "العرض":

void Set::display( ostream& Out ) const
{
  Node * temp = Head;
  cout << "{ ";
  while( temp != NULL )
  {
  cout << temp << ", ";
  temp = temp->Succ;
  return Out;
  }
}

وهنا سائقي:

#include <iostream>
#include <iomanip>
#include "/user/cse232/Projects/project08.set.h"

using namespace std;

int main()
{
  Set X;
  X.insert(10);
  X.insert(20);
  X.insert(30);
  X.insert(40);
  X.display();
}

يقول الخطأ الذي أتلقاه إنه في برنامج التشغيل الخاص بي ، لا أستخدم المعلمات الصحيحة. أنا أفهم هذا لأن ملف .h يستخدم ostream وكمعلمة. سؤالي هو ، ما الذي أستخدمه في ملف برنامج التشغيل الخاص بي عند استدعاء "العرض" كمعلمة جيدة؟

هل كانت مفيدة؟

المحلول

كما قلت ، display يتوقع معلمة من النوع std::ostream &.

في تطبيق طريقة العرض الخاص بك ، يمكنك الإخراج في std::cout الذي يتحدى منطق استلام دفق الإخراج كمعلمة للطريقة. هنا ، الهدف من المعلمة هو أن display سيتمكن المتصل من توفير دفق الإخراج الذي يختاره. إذا كان اختياره هو الإخراج القياسي ، فسوف يكتب:

x.display(std::cout);

هذا يعني أن الخاص بك display يجب أن يخرج التنفيذ فقط في Out المعلمة وليس std::cout.

لاحظ أيضًا أن:

  • لك display يقوم التنفيذ بإرجاع قيمة ، لا ينبغي لها (void نوع العودة)
  • انا استعمل ال std:: بادئة في إجابتي من أجل الوضوح ، لكنها غير مطلوبة في قضيتك لأن ملف الرأس يحتوي على أ using namespace std;.

نصائح أخرى

ما عليك القيام به هو استبدال جميع الأماكن التي استخدمتها Cout. أيضًا تمرير Cout كمعلمة مثل X.Display (cout). هذا لأنه ، cout هو Off -Type Ostream ويتم كل هذا التهيئة في ioStream.

في طريقة العرض الخاصة بك ، أنت تستخدم صراحة. ولكن هذا هو "المعيار". يجب أن تستخدم الطريقة بدلاً من ذلك. لذلك في Display () ، فقط استبدل كل حدوث Cout مع Out.

ثم استخدم العرض (cout) ؛ في مكالمتك

أنت لا تمر في كائن Ostream. تغييره إلى هذا:

X.display(cout);

ثم في الفصل الخاص بك استبدل جميع حوادث cout. أيضًا ، يجب أن تُرجع وظيفة العرض const ostream وبدلاً من الفراغ. يجب أن تستخدم أيضًا مراجع Const Ostream بدلاً من Ostream.

من المعتاد استخدام مشغل خارج الفصل:

const ostream & operator<< (const ostream & Out, const Set & set)
{
  // display your Set here using out, not cout
  return out;
}

بهذه الطريقة يمكنك أن تفعل أشياء مثل:

cout << "This is my set: " << mySet << endl;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top