#include "stdafx.h"
#include <iostream>using namespace std;#include "f2c.h"
extern "C"
{
#include "clapack.h"
}
int _tmain(int argc, _TCHAR* argv[])
{
 integer  N=3 ;
 doublereal a[3][3]=
 {
 {1,1,1},
 {1,1,1},
 {1,1,1}
 };
 integer lda;
 integer INFO; 
 doublereal *work;
 integer lwork;
 lda=N; 
 lwork=N;
 work=(doublereal *)new doublereal[N];
 integer *ipiv;
 ipiv = (integer *)new integer[N];
 dgetrf_(&N, &N, a, &lda, ipiv, &INFO);
 if (INFO!=0)
 return 0;
 dgetri_(&N, a, &lda, ipiv, work, &lwork, &INFO);
 delete ipiv;
 delete work;
 return(INFO==0);
}
问题如下:
1>d:\try\try\try\try.cpp(35) : error C2664: 'dgetrf_' : cannot convert parameter 3 from 'doublereal [3][3]' to 'doublereal *'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

解决方案 »

  1.   

    dgetri_(&N, a, &lda, ipiv, work, &lwork, &INFO); 
    //将第3个参数强制转换为doublereal*, (doublereal*)a
      

  2.   

    是用这个强制转换么?第三个参数本来就定义的是doublereal啊.......
    doublereal aa=reinterpret_cast<doublereal>(aa);
    这个也不行~~~
    error C2040: 'aa' : 'doublereal' differs in levels of indirection from 'real [3][3]'
    error C2440: 'reinterpret_cast' : cannot convert from 'real [3][3]' to 'doublereal'
      

  3.   

    请问楼主是如何解决这个问题的,我刚接触CLAPACK也遇到同样的问题了……