2016-10-20 6 views
0

) 私は解決するのが非常に簡単かもしれない問題がありますが、C++で適切な形式を見つけることができません。 与えられたヘッダファイルの別のクラスのオブジェクトを宣言したいと思います。残念ながら、私はエラーを取得する:別のヘッダファイル内のオブジェクトの宣言

cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for  C/ObjC but not for C++ [enabled by default] 
calc/solver_nonl/new_raphs.cpp: In constructor 
‘new_raphs::new_raphs(Eigen::MatrixXd, Eigen::MatrixXd, Eigen::MatrixXd, Eigen::MatrixXd, Eigen::MatrixXd)’: 
calc/solver_nonl/new_raphs.cpp:7:44: error: no matching function for call to ‘stiff_nonl::stiff_nonl()’ 
:set_force(node_matrix,dof_matrix_input) 
^ 
calc/solver_nonl/new_raphs.cpp:7:44: note: candidates are: 
In file included from calc/solver_nonl/new_raphs.h:8:0, 
from calc/solver_nonl/new_raphs.cpp:1: 
calc/solver_nonl/../fem_nonl/stiff_nonl.h:20:5: note: stiff_nonl::stiff_nonl(Eigen::MatrixXd, Eigen::MatrixXd, Eigen::MatrixXd, Eigen::MatrixXd) 
stiff_nonl(MatrixXd node_matrix, MatrixXd dof_matrix_input, MatrixXd element_matrix, MatrixXd element_info_matrix); 
^ 
calc/solver_nonl/../fem_nonl/stiff_nonl.h:20:5: note: candidate expects 4 arguments, 0 provided 
calc/solver_nonl/../fem_nonl/stiff_nonl.h:17:7: note: 
stiff_nonl::stiff_nonl(const stiff_nonl&) 
class stiff_nonl : public set_force 
^ 
calc/solver_nonl/../fem_nonl/stiff_nonl.h:17:7: note: candidate expects 1 argument, 0 provided 
calc/solver_nonl/new_raphs.cpp: In member function ‘Eigen::MatrixXd& new_raphs::get_epsilon_results(int, int)’: 
calc/solver_nonl/new_raphs.cpp:92:1: warning: no return statement in function returning non-void [-Wreturn-type] 
} 
^ 
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 
make: *** [all] Fehler 1 

私は、多くの場合、前に別のクラスのオブジェクトを宣言しているが、私がここで間違って何をやっていますか?次のように

ヘッダファイルに見える:

#ifndef NEW_RAPHS_H 
#define NEW_RAPHS_H 
# include "../../pre/boundary_force/set_force.h" 
# include <iostream> 
#include "../fem_lin/stiff.h" 
#include "../fem_nonl/stiff_nonl.h" 
using namespace std; 
class new_raphs : set_force 
{ 
public: 
new_raphs(MatrixXd node_matrix, MatrixXd dof_matrix_input, MatrixXd element_matrix, MatrixXd element_info_matrix, MatrixXd force_matrix_input); 
MatrixXd elements; 
MatrixXd elements_info; 
MatrixXd force_matrix; 
void calc(); 
VectorXd U; 
MatrixXd res; 
MatrixXd result_matrix; 
MatrixXd &get_result(); 
stiff_nonl stiffness_nonl; // here is the bug! 
MatrixXd &get_epsilon_results(int noe, int num_gauss_point); 
}; 
#endif // NEW_RAPHS_H 

彼はobviousely宣言のようにdoesntのstiff_nonl stiffness_nonl。 ??? stiff_nonlクラスが別のクラスから継承することは何かを持っていますか?宣言でこれを考慮する必要がありますか?

C++チェッカーの方が私を助けてくれますか?

事前に感謝します。

いいえフランク

+0

が '' stiff_nonl(引数なしで)デフォルトコンストラクタを与えるか、適切な引数は、おそらくあなたの問題を解決します...私には少し奇妙です。注意:型を命名する際に各単語の最初の文字を捕捉するのが一般的です。 'stiff_nonl'はおそらく' Stiff_Nonl'です。 – George

+0

おそらくstiffness_nonlをnew_raphsのコンストラクタの初期化リストに追加すると助けになります(Georgeが示すように問題とは若干異なる) – stefaanv

答えて

0

stiff_nonlにはデフォルトのコンストラクタがありません。あなたは、new_raphsコンストラクタの初期化リストに例えばを正しい引数を渡すことができます。

class new_raphs : public set_force 
0

うわーありがとう:また、私はあなたがここに公共の継承を望んでいたことを信じ

new_raphs::new_raphs(MatrixXd node_matrix, MatrixXd dof_matrix_input, MatrixXd element_matrix, MatrixXd element_info_matrix, MatrixXd force_matrix_input) 
    : stiffness_nonl() //pass arguments to stiff_nonl constr. inside brackets 
{ 
    //... 
} 

!今では動作します:)

正しいコンストラクタだった:

new_raphs::new_raphs(MatrixXd node_matrix, MatrixXd dof_matrix_input, MatrixXd element_matrix, MatrixXd element_info_matrix, MatrixXd force_matrix_input) 

:set_force(node_matrix,dof_matrix_input), stiffness_nonl(node_matrix, dof_matrix_input, element_matrix, element_info_matrix) 

私はなぜオブジェクト名(stiffness_nonl)とないクラスまたはコンストラクタ名(stiff_nonl)まだ少し混乱しています?これは、乾杯フランツ

+0

C++ /オブジェクト指向プログラミングブックを読む必要があります。最初のケースでは、引数を基本クラス(set_force)に渡します。第2の場合は、クラスフィールド(stiffness_nonl)の初期化です。クラスとオブジェクト(クラスのインスタンス)の違いを読み、継承についてさらに学んでください。 – foxfireee

関連する問題