質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

14312閲覧

C++で,コンパイルできない  error: cannot convert ‘double’ to ‘double*’

takashi.f

総合スコア45

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/01/09 19:01

編集2019/01/09 19:26

言語はC++,コンパイラはgcc,osはwslを使用しています.
下記のエラーが出てきてコンパイルが通らず困っています.どなたか原因をご教授お願い致します。

error: cannot convert ‘double’ to ‘double*’ for argument ‘1’ to ‘void sf_F1_ijk(double*, double*, double, double, double, double, double, double*, double**, double**)’
sf_F1_ijk(vecRij[3], vecRik[3],Rij,Rik,cost,lambda,zeta,&F1,&dF1j[3],&dF1k[3]);

using namespace std; #include <iostream> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <cmath> #include <limits> void sf_F1_ijk(double vecRij[3],double vecRik[3], double Rij, double Rik, double cost, double lambda, double zeta,double *Fijk, double *dFijk_dRj[3], double *dFijk_dRk[3]) ; void sf_cut(double Rij,double Rc, double *fc,double *dfc) ; void sf_G4_update(double nG4, double vecRij[3], double vecRik[3], double vecRjk[3], double Rij, double Rik, double Rjk, double cost, double n[100], double G[100], int iG, double dGi[3][100], double dGj[3][100], double dGk[3][100]) ; void sf_G4(int iG4,double *lambda,double *zeta,double *eta); int main(void) { double dGi[3][3]={}; double Fijk,dFijk_dRj[3],dFijk_dRk[3], Fijk_dRk[3],vecRij[3]={ } ,vecRik[3]={ } ,vecRjk[3]={ } ,Rij, Rik; double s; double cost,lambda, zeta ; sf_F1_ijk(vecRij[3],vecRik[3], Rij, Rik, cost, lambda, zeta,&Fijk,&dFijk_dRj[3],&dFijk_dRk[3]) ; s=Fijk ; cout<<s<<"\n" ; } void sf_F1_ijk(double vecRij[3], double vecRik[3],double Rij, double Rik,double cost, double lambda,double zeta, double *Fijk,double *dFijk_dRj[3],double *dFijk_dRk[3]) { double arg, prefactor; arg = 0.50000000*(1.0000000 + lambda*cost) ; prefactor = 0.50000000*zeta*lambda*pow(arg,(zeta-1.0000000)); *Fijk = pow(arg,zeta); for (int i=0;i<3; i++){ *dFijk_dRj[i] = prefactor*( -cost*( vecRij[i]/Rij )+ vecRik[i]/Rij ); *dFijk_dRk[i] = prefactor*( -cost*( vecRik[i]/Rik ) + vecRik[i]/Rik ); } } void sf_F2_ij(double Rij, double Rc,double eta, double *Fij, double *dFij) { double fexp=0; double fc=0,dfc=0; sf_cut(Rij, Rc, &fc, &dfc) ; fexp = exp(-eta*Rij*Rij); *Fij = fexp*fc; *dFij = fexp*( dfc - 2.00000000*eta*Rij*fc ) ; } void sf_G4_update(double nG4, double vecRij[3], double vecRik[3], double vecRjk[3], double Rij, double Rik, double Rjk, double cost, double n[100], double G[100], int iG, double dGi[3][100], double dGj[3][100], double dGk[3][100]) { double G4=0; double dG4[3]={}; //sf_G4 double lambda,zeta,eta; //Rc double Rc; //sf_F1_ijk double F1, F1k,dF1k[3],dF1j[3]; //sf_F2 double F2ij,dF2ij,F2ik ,dF2ik,F2jk,dF2jk ; for( int iG4 = 0 ; iG4<nG4; iG4++){ iG = iG + 1; Rc=1.00000000000000 ; //atode function sf_G4(iG4,&lambda,&zeta,&eta); sf_F1_ijk(vecRij[3], vecRik[3],Rij, Rik,cost,lambda,zeta,&F1,&dF1j[3],&dF1k[3]); sf_F2_ij(Rij, Rc, eta, &F2ij, &dF2ij); sf_F2_ij(Rik, Rc, eta, &F2ik, &dF2ik); sf_F2_ij(Rjk, Rc, eta, &F2jk, &dF2jk); G4 = F1*F2ij*F2ik*F2jk; //factor of 2 for k<j in sf_fingerprint() G[iG] = G[iG] + 2.000000000*G4 ; dG4[3] = F2jk*( -(dF1j[3])+dF1k[3])*F2ij*F2ik - vecRij[3]*F1*dF2ij*F2ik- vecRik[3]*F1*F2ij*dF2ik ; dGi[3][iG]= dGi[3][iG] + 2.00000000*dG4[3] ; dG4[3] = dF1j[3]*F2ij*F2ik*F2jk + vecRij[3]*F1*dF2ij*F2ik*F2jk - vecRjk[3]*F1*F2ij*F2ik*dF2jk ; dGj[3][iG] = dGj[3][iG] + 2.000000000*dG4[3] ; dG4[3] = dF1k[3]*F2ij*F2ik*F2jk +vecRik[3]*F1*F2ij*dF2ik*F2jk+vecRjk[3]*F1*F2ij*F2ik*dF2jk ; dGk[3][iG] = dGk[3][iG] + 2.000000000*dG4[3] ; G[iG] = G[iG] + 2.000000000*G4 ; } } void sf_cut(double Rij,double Rc, double *fc,double *dfc) { if (Rij >= Rc){ *fc = 0.000000000 ; *dfc = 0.000000000; } else{ *fc = 0.5000000*(cos(M_PI*Rij/Rc) + 1.000000000); *dfc = -0.5000000*M_PI/Rc*sin(M_PI*Rij/Rc) ; } } void sf_G4(int iG4,double *lambda,double *zeta,double *eta) { //initialize double coef_lambda[1]={ }; double coef_zeta[1]={ }; double coef_eta[1]={ }; coef_lambda[1]=1; coef_zeta[1]=1; coef_eta[1]=1; *lambda=coef_lambda[1]; *zeta=coef_zeta[1]; *eta=coef_eta[1]; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

解決しました!ありがとうございます!

投稿2019/01/10 14:21

takashi.f

総合スコア45

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

sf_F1_ijk(vecRij[3],vecRik[3], Rij, Rik, cost, lambda, zeta,&Fijk,&dFijk_dRj[3],&dFijk_dRk[3]) ;

コンパイラは「doubleからdoubleに変換できない」ていうてます。
第1,2引数はdouble
を渡すべきなのにdoubleを与えてるから。
※ それぞれ vecRij, vecRik が正解なのかな?

投稿2019/01/09 19:39

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takashi.f

2019/01/10 14:22

解決しました!ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問