我写了一个关于计算协方差的简单程序。 数据从txt文件中读取并转换为矩阵。然后协方差由函数calcov()计算。
警告deprecated conversion from string constant to char [-Wwrite-strings]
在printmatrix("cov.txt",cov);
行出现。我在这里检查了类似的问题,但我仍然无法找到我出错的地方,所以我发布了它。我希望我能搞清楚。
void calCov(gsl_matrix* data,gsl_matrix* cov,int p)
{
for(int i=0;i<p;i++){
for(int j=0;j<p;j++){
gsl_vector_view a = gsl_matrix_column (data, i);
gsl_vector_view b = gsl_matrix_column (data, j);
gsl_matrix_set(cov,i,j,gsl_stats_covariance(a.vector.data, a.vector.stride,b.vector.data, b.vector.stride, a.vector.size));
}
}
}
int main()
{
int n = 158; //sample size
int p = 51; //number of variables
int i;
char datafilename[] = "erdata.txt";
//allocate the data matrix
gsl_matrix* data = gsl_matrix_alloc(n, p);
//read the data
FILE* datafile = fopen(datafilename, "r");
fclose(datafile);
gsl_matrix* cov = gsl_matrix_alloc(p, p);
calCov(data,cov,p);
printmatrix("cov.txt",cov);}
答案 0 :(得分:1)
将printmatrix
的第一个参数声明为std::string
或指向char const
的指针。
顺便说一句,当问题出现在名为printmatrix
的函数时,为什么不在示例代码中包含它。
background info:字符串文字"blah"
的类型是5个char const
值的数组(第五个是终止零)。在C中,窄字符串文字可以隐式转换为char*
,这在第一个C ++标准C ++ 98中得到了支持,但已经被弃用了。在C ++ 11中删除了转换。