私はコンパイルのカップルを与えるC++ソフトウェアをコンパイルしたい エラー。このエラーは、解決できないメンバ関数に関するものです。継承されたメンバ関数は宣言されていないようですが、何が起こっていますか?
この質問には、回答に必要なすべてが含まれている必要があります。しかし、その が実際に該当する場合、私は今答えを見つけたはずです。ですので source codeをご覧ください。 この質問のすべてのコードは私のものではなく、GPLv2の下でライセンスされています。
私はコンパイルシステムは、Red Hat Enterprise Serverの 6.8を実行しているIBMのPowerPC 740です。モジュールを使って、私はClang 3.7を有効にしました。すべてがIBM PowerPC A2チップ用にクロスコンパイルされた です。これはIBM BlueGene/Qスーパーコンピュータです。で世話をしなければならない それらのもの、私のcompilation script必要な多くのconfigure
とCXXFLAGS
を設定します 。
私は現在、私の現在の状態を取得するコンパイルエラー(コミット fee0a02
)は、このいずれかになります。
bfmcommqmp.C:183:5: error: use of undeclared identifier 'gather'
gather(result_cb, psi, dag);
^
問題のある行はbfmcommqmp.C
で、このメソッドの定義である:
168 template <class Float>
169 void bfmcommQMP<Float>::comm_start(int result_cb, Fermion_t psi, int dag) {
170 // gather the faces. Routines here are threaded.
171 // All threads cooperate in gathering.
172
173 // if (this->isBoss() && (me == 0)) {
174 // this->Error("comm_start checking heap\n"); fflush(stdout);
175 // mcheck_check_all();
176 // this->Error("comm_start mcheck_all");fflush(stdout);
177 // }
178
179 int me = this->thread_barrier();
180
181 this->thread_barrier();
182
183 gather(result_cb, psi, dag);
184
185 this->thread_barrier();
186 if (me == 0) {
187 comm_qmp_start(psi);
188 }
189 this->thread_barrier();
190
191 return;
192 }
もちろんこれはbfmcommQMP
クラスの一部です。それはbfmbase
から継承
8 template <class Float>
9 class bfmcommQMP : public bfmbase<Float> {
10 public:
11 // QMP thingy-me-bob's
12 QMP_msghandle_t multi_handle[2];
13
14 QMP_msgmem_t send_ops_msgmem_t[8];
15 QMP_msgmem_t recv_ops_msgmem_t[8];
16
17 QMP_msghandle_t send_multi_handle;
18 QMP_msghandle_t send_handles[8];
19
20 QMP_msghandle_t recv_handles[8];
21 QMP_msghandle_t all_handles;
22
23 Float *simd_rbuf[8];
24 Float *receive_area;
25
26 int num_op;
27
28 virtual bool isBoss();
29
30 virtual void recv_init(void);
31 virtual void recv_end(void);
32
33 virtual void comm_init(void);
34 virtual void comm_end(void);
35 virtual void comm(int result_cb, Fermion_t psi, int dag);
36 virtual void comm_start(int result_cb, Fermion_t psi, int dag);
37 virtual void comm_qmp_start(Fermion_t psi);
38 virtual void comm_qmp_complete(void);
39 virtual void comm_merge(void);
40 virtual void comm_complete(int result_cb, Fermion_t psi);
41 virtual void comm_gsum(double &val);
42 virtual void comm_gsum(double *val, int N);
43 };
:関連する ヘッダファイル、bfmcommqmp.h
を見てみると、一つは、このクラスの宣言を検索します。私の理解から
133 template <class Float>
134 class bfmbase : public bfmarg, public ThreadModel {
135 public:
282 void gather(int result_cb, Fermion_t psi, int dag);
283 void gather(int mu, int result_cb, Fermion_t psi, int dag);
1018 };
、bfmcommQMP
から 非仮想関数gather
を継承している必要がありますクラス: bfmcommqmp.h
に含まれているファイルbfm.h
にジャンプする、我々は2つのgather
メソッドを含むクラス定義を、見つけますbfmbase
。明らかにそうでない場合、 そうでなければClangはそれについて不平を言わないでしょう。
私はここで何が欠けていますか?なぜ機能が bfmcommQMP::comm_start
のメンバー機能の中で利用できないのですか?gather
:簡素化するために、
代替は派生
Derived::foo()
でを行うか
などのコール関連を修飾することですそのメソッドの呼び出しには 'this->'が前置されています!今私はいくつかの他のコンパイルエラーを得て、これは解決されるようだ。どうもありがとう、私は他の場所を探していて、このようなことが原因であるとは思わなかったでしょう。 –
ようこそ。 [C++のテンプレート:完全なガイド](https://www.amazon.com/Templates-Complete-Guide-David-Vandevoorde/dp/0201734842)は、テンプレートに関する最良の書籍です。テンプレート。 Old(2002)でも、まだまだ関連性が高い。著者は現代のC++(C++ 11以降)へのアップデートに取り組んでいます。 – vsoftco