Предотвращение множественных включений в C ++ - PullRequest
0 голосов
/ 30 октября 2011

У меня есть 2 класса в разных пространствах имен, и оба они должны включать в себя один и тот же класс Image.h, но когда я включаю одновременно, я получаю ошибку.Вот мои классы:

FilterManager.h:

#ifndef FILTERMANAGER_H_
#define FILTERMANAGER_H_

#include "../Images/Image.h"
namespace Filter {

class FilterManager {
public:
    Image* applyFilter(int filterType, PGMImage *pgmImage);

};

} /* namespace Filter */
#endif /* FILTERMANAGER_H_ */

Основной класс приложения: это включает в себя Images / Image.h и Filter / FilterManager.h одновременно, и я получаю ошибку.

#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <stdio.h>
#include "Images/Image.h"
#include "Filter/FilterManager.h"


using namespace std;

int main() {

    //new typename ImageIO::ImageIO;

    Images::Image *Image = NULL;

    Filter::FilterManager::getInstance();

    pgmImage = imageIO->readPGM("Resources/house.256.pgm");

    return 0;
}

И Image.h класс

#ifndef IMAGE_H_
#define IMAGE_H_

#include "Image.h"



namespace Images {

class Image {
public:
    Image();
    virtual ~Image();


private:
    int** imatrix(int nrl,int nrh,int ncl,int nch);
};

} /* namespace Image */
#endif /* IMAGE_H_ */

Спасибо за любую помощь

Ответы [ 2 ]

2 голосов
/ 30 октября 2011
class FilterManager {
public:
   Images::Image* applyFilter(int filterType, PGMImage *pgmImage);
};

Вы забыли пространство имен.

Я не вижу #include "PGMImage.h" Где это находится? А что такое PGMImage?

Почему в Image.h есть включение в Image.h?

0 голосов
/ 30 октября 2011

Вероятно, у вас нет проблем с несколькими включениями, но с пространствами имен попробуйте вернуть Images::Image из метода applyFilter.

...