2011-10-29 10 views
-1

私は異なる名前空間に2つのクラスを持ち、それらは両方とも同じImage.hクラスを含む必要がありますが、同時にインクルードするとエラーが発生します。ここに私のクラス:複数のインクルードをC++で防ぐ

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_ */ 

メインアプリケーションクラス:これは同時に画像/ Image.hとフィルタ/ 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クラス任意のヘルプ

+5

ええと...何のエラー? Image.hの内部はどうですか? –

+0

Image.hのコードを表示できますか? '#ifndef IMAGE'を使用していますか?それはどんなタイプのエラーですか? –

+0

私の質問が更新されます – cagryInside

答えて

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

名前空間を忘れました。

「PGMImage.h」が#含まれていません ここにどこですか? PGMImageとは何ですか?

Image.hにImage.hにインクルードが含まれているのはなぜですか?

+0

私はこれをしましたが、私はまだエラーがあり、PGMImageは画像から継承しない他の場所から来ています – cagryInside

+0

もっと情報が必要です... –

+0

あなたは今どのようなエラーになりますか?私は「イメージは「タイプに名前を付けない」」ではないとはかなり確信しています。 – msandiford

0

ため

#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_ */ 

おかげであなたはおそらく複数の問題が含まれていますが、名前空間で、applyFilter方法からImages::Imageを返すしようとしないでください。

+0

いいえ、私は間違ってここに書いています。私はまだ同じ問題を抱えています – cagryInside

+0

@cagryInside:それはあなたのエラーが指しているものですが、名前空間を指定せずに 'Image'への他の参照がないことを確認してください。また、Tomalakのコメントを書き留めておいてください。とても良いヒントです。 – KillianDS

関連する問題