私はCの人ですが、現在はC++プロジェクトに取り組んでいます。私は少し混乱して取得しています理由です:C++クラスのコンストラクタ引数の数が変更されました
我々はこのような継承があります(簡単にするために、私はほとんどすべて省略さが、コンストラクタ)今
ノード - > MultiNode->ラウンドアバウト
いくつかのコードを:
class MultiNode : public sim_mob::Node {
public:
MultiNode(int x, int y) : Node(x, y) {}
...
}
と
class Roundabout : public sim_mob::MultiNode {
public:
Roundabout() : MultiNode() {}
}
あなたが見ることができるように、ラウンドアバウト()コンストラクタはどのなしマルチノード()コンストラクタを呼び出しMultiNodeには2つの引数を持つコンストラクタが1つしかありません:
このようなシナリオは可能ですか?どのようなexpanationはどうですか?
このコードは、元の場所にもコンパイルが、私は編集を開始するためのテストエリアにフォルダをコピーしたとき、私は(私には賢明である)、このエラーを取得: エラー:sim_mob」への呼び出しに該当する機能を:: MultiNode :: MultiNode()
他の同様のファイルやクラスが存在しないと思われます。ご参考のため
エラー:
~/workspace/parser5/geospatial$ make
Scanning dependencies of target driver
[ 33%] Building CXX object CMakeFiles/driver.dir/geo5-pskel.cxx.o
In file included from /home/vahid/workspace/parser5/geospatial/geo5-pskel.hxx:134:0,
from /home/vahid/workspace/parser5/geospatial/geo5-pskel.cxx:39:
/home/vahid/workspace/parser5/geospatial/Roundabout.hpp: In constructor ‘sim_mob::Roundabout::Roundabout()’:
/home/vahid/workspace/parser5/geospatial/Roundabout.hpp:34:27: **error: no matching function for call to ‘sim_mob::MultiNode::MultiNode()’**
/home/vahid/workspace/parser5/geospatial/Roundabout.hpp:34:27: note: candidates are:
/home/vahid/workspace/parser5/geospatial/MultiNode.hpp:42:2: note: sim_mob::MultiNode::MultiNode(int, int)
/home/vahid/workspace/parser5/geospatial/MultiNode.hpp:42:2: note: candidate expects 2 arguments, 0 provided
/home/vahid/workspace/parser5/geospatial/MultiNode.hpp:40:7: note: sim_mob::MultiNode::MultiNode(const sim_mob::MultiNode&)
/home/vahid/workspace/parser5/geospatial/MultiNode.hpp:40:7: note: candidate expects 1 argument, 0 provided
make[2]: *** [CMakeFiles/driver.dir/geo5-pskel.cxx.o] Error 1
make[1]: *** [CMakeFiles/driver.dir/all] Error 2
make: *** [all] Error 2
デフォルトコンストラクタがマルチノードのために利用できないので、いいえ、あなたはそれを行う傾けるあなた
'MultiNode()'がデフォルトの引数を持っていなければ、それは不可能ですが、ここではそうではないようです。コンパイルが正しく行われているファイルにいくつかのエラーステートメントを入れて、エラーが出ているかどうかを確認することができます。これにより、元の場所にファイルがコンパイルされていることを確認できます。 – iammilind
さらに、iamminlindのアドバイスには、コンパイラの前処理段階だけを実行して、実際にデフォルトのコンストラクタと同じMultinodeクラスがあるかどうかを確認できます。誤って別のものを組み込んだり、#ifdefsで代替バージョンを選択したりしている可能性があります。別の名前空間から同じ名前のクラスを取得することもできるので、その名前を持つすべてのクラスのプリプロセッサ出力を検索する価値があります。 –