C++-C文件里面很多奇怪的语法错误

发布于 2016-10-15 14:08:40 字数 3644 浏览 1468 评论 3

从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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

瑾兮 2017-02-15 17:33:12

把局部变量的定义都放到函数头试试,即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;

偏爱自由 2017-02-01 08:39:33

楼主先试试把文件保存到记事本,然后在从记事本拷贝到编译器。

还有一种情况,编译器提示的错误并不是真正的错误之处,可能是别的地方错了,导致了编译器报这个错。

清晨说ぺ晚安 2016-11-30 09:16:03

我用notepad++将原来的ANSI格式编码转成了UTF-8编码,似乎没有你说的那个问题了,你确定你转换后的文件是UTF-8了?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文