C++-C文件里面很多奇怪的语法错误
从github上下载了一份日本人写的源码,编译后产生了很多奇怪的语法错误,要么提示缺少分号(明明有分号),要么提示某变量没定义(明明有定义),我怀疑是字符编码的问题,就把所有的源文件转为了UTF-8编码格式,但是问题还是没有得到解决,到底问题何在呢?求解释!
源码连接如下:源码
列出工程中的一个c文件如下:
#include "compressiveSensing.h"
// private functions
void mulA( CSstruct *cs, CvMat* x, CvMat* y);
void mulPinv( CSstruct *cs, CvMat* x, CvMat* y);
void saveMat( CvMat *mat, char filename[]);
double Min( double a, double b )
{
return ( a<b )? a : b;
}
double Max( double a, double b )
{
return ( a>b )? a : b;
}
IplImage *solveCPImage( IplImage* src, IplImage *filter)
{
return NULL;
}
CSstruct* createCPStructure( int filterSize, int imgSize)
{
CSstruct* cs = (CSstruct*)malloc(sizeof(CSstruct));
cs->xSize = filterSize;
cs->ySize = imgSize;
int N = cs->xSize;//**ERROR:提示缺少“;”!!!**
int M = cs->ySize;//**ERROR:提示缺少“;”!!!**
// data arguments
cs->A = cvCreateMat( M, N , CV_64FC1);//**ERROR:提示M,N未定义!!!**
cs->x = cvCreateMat( N, 1 , CV_64FC1);//**ERROR:提示N未定义!!!**
cs->y = cvCreateMat( M, 1 , CV_64FC1);//**ERROR:提示M未定义!!!**
/// arguments for bariar and dualtiy
cs->u = cvCreateMat( N, 1 , CV_64FC1);
cs->z = cvCreateMat( M, 1 , CV_64FC1);
cs->f = cvCreateMat( 2*N, 1 , CV_64FC1);
cs->nu = cvCreateMat( M, 1 , CV_64FC1);
// inital parameters
cs->pobj = DBL_MAX;
cs->dobj = -DBL_MAX;
// arguments to compute gradience
cs->d1 = cvCreateMat( N, 1, CV_64FC1 );
cs->d2 = cvCreateMat( N, 1, CV_64FC1 );
cs->q1 = cvCreateMat( N, 1, CV_64FC1 );
cs->q2 = cvCreateMat( N, 1, CV_64FC1 );
// arguments for PCG
cs->gradPhi = cvCreateMat( 2*N, 1 , CV_64FC1);
cs->prb = cvCreateMat( N, 1, CV_64FC1 );
cs->prs = cvCreateMat( N, 1, CV_64FC1 );
cs->dxu = cvCreateMat( 2*N, 1 , CV_64FC1);
cs->diagxtx = cvCreateMat( 2*N, 1 , CV_64FC1);
cs->P = cvCreateMat( 2*N, 2*N , CV_64FC1);
cs->Pinv = cvCreateMat( 2*N, 2*N , CV_64FC1);
cs->x1 = cvCreateMat( N, 1, CV_64FC1);
cs->x2 = cvCreateMat( N, 1, CV_64FC1);
cs->y1 = cvCreateMat( N, 1, CV_64FC1);
cs->y2 = cvCreateMat( N, 1, CV_64FC1);
// argumnets for newton step ( backtrack line search )
cs->dx = cvCreateMat( N, 1 , CV_64FC1);
cs->du = cvCreateMat( N, 1 , CV_64FC1);
cs->newX = cvCreateMat( N, 1 , CV_64FC1);
cs->newU = cvCreateMat( N, 1 , CV_64FC1);
cs->newF = cvCreateMat( 2*N, 1 , CV_64FC1);
cs->newZ = cvCreateMat( M, 1 , CV_64FC1);
// parameters
cs->mu = 2.0;
cs->MAX_NT_ITER = 100;
cs->alpha = 0.01;
cs->beta = 0.5;
cs->MAX_LS_ITER = 100;
cs->retol = 0.02;
cs->lambda = 1.0;
// initial values
cs->eta = 0.001;
cs->t = Min( Max( 1, 1/cs->lambda), 2*N / pow(10, -3) );
cs->s = DBL_MAX;
cs->pobj = DBL_MAX;
cs->dobj = -DBL_MAX;
cvSetValue( cs->x, 0.0);
cvSetValue( cs->u, 1.0);
for(int i = 0; i < N; ++i)
{
MAT( *cs->f, i, 0 ) = MAT( *cs->x, i, 0 ) - MAT( *cs->u, i, 0 );
MAT( *cs->f, i+N, 0 ) = -MAT( *cs->x, i, 0 ) - MAT( *cs->u, i, 0 );
}
cvSetValue( cs->dxu, 0.0 );
cvSetValue( cs->diagxtx, 2.0 );
return cs;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
把局部变量的定义都放到函数头试试,即L28~L33:
cs->xSize = filterSize;
cs->ySize = imgSize;
int N = cs->xSize;//ERROR:提示缺少“;”!!!
int M = cs->ySize;//ERROR:提示缺少“;”!!!
改成:
int N;
int M;
cs->xSize = filterSize;
cs->ySize = imgSize;
N = cs->xSize;
M = cs->ySize;
楼主先试试把文件保存到记事本,然后在从记事本拷贝到编译器。
还有一种情况,编译器提示的错误并不是真正的错误之处,可能是别的地方错了,导致了编译器报这个错。
我用notepad++将原来的ANSI格式编码转成了UTF-8编码,似乎没有你说的那个问题了,你确定你转换后的文件是UTF-8了?