سؤال

وأواجه مشاكل التبعية. لدي فئتين: Graphic وImage. كل واحد له في .CPP الخاصة والملفات .H. أنا يفيدهم كما يلي:

وGraphic.h:


    #include "Image.h"
    class Image;
    class Graphic {
      ...
    };

وImage.h:
    


    #include "Graphic.h"
    class Graphic;
    class Image : public Graphic {
      ...
    };

وعندما أحاول تجميع، وأحصل على الخطأ التالي:

    Image.h:12: error: expected class-name before ‘{’ token

إذا كنت إزالة الإعلان إلى الأمام من Graphic من Image.h أحصل على الخطأ التالي:

    Image.h:13: error: invalid use of incomplete type ‘struct Graphic’
    Image.h:10: error: forward declaration of ‘struct Graphic’
هل كانت مفيدة؟

المحلول

وهذا عمل بالنسبة لي:

وImage.h:

#ifndef IMAGE_H
#define IMAGE_H

#include "Graphic.h"
class Image : public Graphic {

};

#endif

وGraphic.h:

#ifndef GRAPHIC_H
#define GRAPHIC_H

#include "Image.h"

class Graphic {
};

#endif

والتعليمة البرمجية التالية بتصنيف مع عدم وجود خطأ:

#include "Graphic.h"

int main()
{
  return 0;
}

نصائح أخرى

وأنت لا تحتاج إلى تضمين Image.h أو إلى الأمام تعلن صورة في Graphic.h - وهذا تبعية دائرية. إذا يعتمد Graphic.h على أي شيء في Image.h تحتاج إلى تقسيم ذلك للخروج الى رأس ثالث. (إذا كان لديها الجرافيكي عضو الصور، التي ليست مجرد الذهاب الى العمل.)

وGraphic.h لا تحتاج إلى تضمين image.h، وأنها لا تحتاج إلى إعادة توجيه يعلن الفئة صور. أيضا، Image.h لا تحتاج إلى إعادة توجيه يعلن الطبقة الرسم منذ كنت # تضمين الملف الذي يحدد تلك الفئة (كما يجب).

وGraphic.h:

class Graphic {
  ...
};

وImage.h:

#include "Graphic.h"
class Image : public Graphic {
  ...
};

ومنذ صورة تمتد الجرافيكي، وإزالة إدراج صورة في ملف Graphic.h الخاص بك.

وGraphic.h

class Graphic {
  ...
};

أولا إزالة هذا، يجب أن يكون دائما تعريف الفئة الكاملة في ترتيب وراثة من فئة:

class Graphic;

والثانية، وإزالة كل ما يشير إلى صورة من Graphic.h. فإن الأم عادة لا تحتاج إلى معرفة من الطفل لها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top