基本的には、私は基本クラスmaterialを持っています。マテリアルには多くの仮想機能があり、そのうちの1つは「ダブルDVD」(マテリアルのタイプですが、別のマテリアルである2つのDVDで構成されています)と呼ばれています。派生クラスを使用するときに "循環インクルード"の周りを見つける
最初は、 "Set"という派生クラスのマテリアルのペア/ベクタとして保存し、material.hで定義された仮想関数を使用して2つのポインタのベクトルを返すと思っていました(またはそれ以上の)DVDオブジェクトが格納される。このコードは絶対に壮大な方法をで壊すせ
#ifndef CWK_MAT_H
#define CWK_MAT_H
#include "DVD.h"
#include <string>
#include <vector>
namespace MATERIALS
{
:
virtual std::vector<DVD *> getPointers() { return std::vector<DVD *>(); }
しかし、問題は、これがこのようなMaterials.hに「DVD.h」を含めることを必要としたということです。この問題を回避する方法はありますか?
std::vector<Material *> vect;
vect[1]->getPointers()
のように、私はのベクトルにそれを変更しようとした:私は、私はこのベクターからもアクセスできるように、材料のクラスにあるようにポインタを取得するために仮想メソッドが必要私はそれを派生クラスの "set"(Materialから派生したもの、DoubleDVDはSetから派生したもの)に変更するとVisual Studioが基本的にフリーズし、IntelliSenseが永久に更新されます)
Isこれを行う方法はありますか?
[C++ - フォワード宣言]の可能な複製(http://stackoverflow.com/questions/4757565/c-forward-declaration) – xaxxon