私は次のようにしたいと思います。継承、ポリシーとテンプレートが混在
私は現在、私たちの懸念事項ではないいくつかの要素で、次のようなクラスを持っています。
template<class A>
class Domain
{
};
私の問題は、いくつかの新しいオブジェクトをこのクラスのメンバーにしたいということです。しかし、私はこの定義でそれらを指定することはできません。他のファイルで指定する必要があります。次のように私の最初に考えたのは、継承を使用していました:
template<class G,class ctype>
class Data
{
public:
Data(G& g_);
protected:
std::vector<ctype> data1;
};
、その後
template<class A>
class Domain : public Data<A,A::ctype>
{
public:
Domain(A& a);
void writeData(data1);
};
template<class A>
Domain<A>::Domain(A& a)
{
}
をしかし、私はそれをコンパイルするために取得することができていませんでした。 これについてどうすればよいですか? この方法をよりクリーンな方法で行う方法はありますか?
完全なプログラムは次のとおりです。ヘッダーファイル内にのみあります。私はまだインスタンスを作成していません。プログラムは
28 template<class GV, class Data>
29 class System : public Data<GV,GV::ctype>
30 {
31 private:
32 typedef Dune::VTKWriter<GV> VTKWriter;
33 GV& gv_;
34 VTKWriter vtkwriter_;
35
36 public:
37 System(GV& gv);
38 void writeSystemInfo(std::string outfile);
39 };
40
41 template<class GV, class Data>
42 System<GV,Data>::System(GV& gv) : gv_(gv) , vtkwriter_(gv)
43 {
44 }
45
46 template<class GV,class Data>
47 void System<GV,Data>::writeSystemInfo(std::string outfile)
48 {
49 Data::addDatatoVTK();
50 vtkwriter_.write(outfile, Dune::VTKOptions::binaryappended);
51 }
であり、エラーが
../dune/simulationlab/system/system.hh:29:29: error: expected template-name before ‘<’ token
../dune/simulationlab/system/system.hh:29:29: error: expected ‘{’ before ‘<’ token
../dune/simulationlab/system/system.hh:29:29: error: expected unqualified-id before ‘<’ token
../dune/simulationlab/system/system.hh:46:33: error: invalid use of incomplete type ‘class Dune::System<GV, Data>’
../dune/simulationlab/system/system.hh:29:9: error: declaration of ‘class Dune::System<GV, Data>’
../dune/simulationlab/system/system.hh:52:60: error: invalid use of incomplete type ‘class Dune::System<GV, Data>’
../dune/simulationlab/system/system.hh:29:9: error: declaration of ‘class Dune::System<GV, Data>’
私はクラスDomainの複数の宣言を望みません。 –
'writeData(data1);'行が関数呼び出しか関数宣言であるとしますか?それはどちらでもないからです。また、コンストラクタの定義が宣言と一致せず、場所のセミコロンが不足しています。 – interjay
申し訳ありません...私はちょっと早くそれを書きました... 実際にプログラムが長すぎます 私はそれを短縮してキーポイントを強調しようとしました 私はそれを修正します... –