Hi, here are the errors I am getting when i compile on cygwin. It is weird that the code compiles and runs perfectly on Visual Studio.

$ g++ -o mainUnix.out mainUnix.cpp

mainUnix.cpp: In function `int main()':
mainUnix.cpp:47: error: expected primary-expression before numeric constant
mainUnix.cpp:47: error: expected `;' before numeric constant
mainUnix.cpp:49: error: invalid initialization of non-const reference of type 'std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&' from a temporary of type 'int'
mainUnix.cpp:29: error: in passing argument 1 of `void loadRegressionMatrices(std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&, std::vector<double, std::allocator<double> >&, std::vector<OptionParam, std::allocator<OptionParam> >&)'
mainUnix.cpp:53: error: request for member `size' in `64', which is of non-class type `int'
mainUnix.cpp:55: error: invalid types `int[int]' for array subscript
mainUnix.cpp:55: error: invalid types `int[int]' for array subscript
mainUnix.cpp:55: error: invalid types `int[int]' for array subscript
mainUnix.cpp:55: error: invalid types `int[int]' for array subscript
mainUnix.cpp:55: error: invalid types `int[int]' for array subscript
mainUnix.cpp:60: error: invalid initialization of non-const reference of type 'std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&' from a temporary of type 'int'
mainUnix.cpp:30: error: in passing argument 1 of `void transpose(std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&, std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&)'
mainUnix.cpp:63: error: invalid initialization of non-const reference of type 'std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&' from a temporary of type 'int'
mainUnix.cpp:31: error: in passing argument 2 of `void computeProduct(std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&, std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&, std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&)'

Here is the relevant portion of Code:

#include <iostream>
#include <string>
 #include <fstream>
 #include <sstream> //because i use istringstream
 #include <vector>
#include <valarray> // because we use exp() in the function N()
#include <math.h> // because we use fabs() in Bisect()
#define TINY 1.0e-20

using namespace std;
 enum Type{put=0, call=1};
 struct OptionParam{
         double S;
         int K;
         double r;
         double T;
         double price;
         double sigImpl;
         Type putOrCall;
 };
 double BS_Price(double S,double K,double r,double T,double sig, char * optionType);
 double N(double x);
 double BS_Bisect(char* optionType,double S,double K,double r,double T,double a,double b,double realC);
 double computeAvg(vector<double>& K, vector<double>& T, vector<double>& sig, int k, int t, int s);
 void loadOLSmatrices(vector< vector<double> >& M, vector<double>& b, vector<OptionParam>& op);
 void loadParametersFromFile(vector<OptionParam>& op, char* file, char* type);
 void loadParametersFromVector(vector<OptionParam>& op,vector<double>& K,vector<double>& K_2,vector<double>& KT, vector<double>& T, vector<double>& sig);
 void computeImpliedVols(vector<OptionParam>& op);
 void loadRegressionMatrices(vector<vector<double> >& X,vector<double>& b, vector<OptionParam>& op);
 void transpose(vector<vector<double> > & a,vector<vector<double> > & at);
 void computeProduct(vector<vector<double> >&x,vector<vector<double> >&y,vector<vector<double> >& prod);
 void computeProduct2(vector<vector<double> >&x,vector<double> &y,vector<double>& prod);
 void ludcmp(vector<vector<double> >&a, int n, vector<int>& indx, double *d);
 void lubksb(vector<vector<double> >&a, int n, vector<int>& indx, vector<double>& b);
 
 int main()
 {
     vector<vector<double> > A ( 5, vector<double> ( 5 ) );
     vector<double> b(5);
     vector<OptionParam> op;
     loadParametersFromFile(op,"Data.csv","call");

     cout << op.size()<<endl;
     printf("%lf,%d\n",op[0].price,op[0].K);
 
     computeImpliedVols(op);
         vector<vector<double> > _X ( (int)op.size(), vector<double> ( 5 ) );
         vector<double> _b((int)op.size() );
         loadRegressionMatrices(_X,_b,op);
 
         ofstream csvRegMatrix;
         csvRegMatrix.open("RegMatrix.csv");
         for (int i=0; i<(int)_X.size(); i++)
         {
                 csvRegMatrix << _X[i][0] << ","<< _X[i][1] << ","<< _X[i][2] << ","<< _X[i][3] << ","<< _X[i][4]<<","<<_b[i] <<endl;
         }
         csvRegMatrix.close();
 
         vector<vector<double> > _Xt ( 5, vector<double> ( (int)op.size() ) );
         transpose(_X,_Xt);
 
         vector<vector<double> > _XtX ( 5, vector<double> ( 5 ) );
         computeProduct(_Xt,_X,_XtX);

         ofstream csvXtXMatrix;
         csvXtXMatrix.open("XtXMatrix.csv");
         for (int i=0; i<(int)_XtX.size(); i++)
         {
                csvXtXMatrix << _XtX[i][0] << ","<< _XtX[i][1] << ","<< _XtX[i][2] << ","<< _XtX[i][3] << ","<< _XtX[i][4] <<endl;
         }
         csvXtXMatrix.close();
 
         vector<double > _Xt_b ( 5);//, vector<double> ( (int)op.size() ) );
         computeProduct2(_Xt,_b,_Xt_b);
 
         vector<int> indx(5);
     double d ;
     vector<double> beta(5);
         int i,j;
         vector<vector<double> > _XtXinv ( 5, vector<double> ( 5 ) );
         vector<double> col (5);
     ludcmp(_XtX,5,indx,&d);
         for( j=0;j<5;j++){
                 for(i=0;i<5;i++)        col[i]=0.0;
                 col[j]=1.0;
                 lubksb(_XtX,5,indx,col);
                 for(i=0;i<5;i++) _XtXinv[i][j]=col[i];
         }
         computeProduct2(_XtXinv,_Xt_b,beta);
         cout<<beta[0]<<","<<beta[4]<<endl;
 
         system("pause");
 }

What could the problem be.

Edited 7 Years Ago by peter_budo: Keep It Organized - For easy readability, always wrap programming code within posts in [code] (code blocks)

if you would like to load this code on your editor, i am pasting the code without the preceding line numbers on each line of code.

#include <iostream>
#include <string>
#include <fstream>
#include <sstream> //because i use istringstream
#include <vector>
#include <valarray> // because we use exp() in the function N()
#include <math.h> // because we use fabs() in Bisect()
#define TINY 1.0e-20

using namespace std;
enum Type{put=0, call=1};
struct OptionParam{
        double S;
        int K;
        double r;
        double T;
        double price;
        double sigImpl;
        Type putOrCall;
};
double BS_Price(double S,double K,double r,double T,double sig, char * optionType);
double N(double x);
double BS_Bisect(char* optionType,double S,double K,double r,double T,double a,double b,double realC);
double computeAvg(vector<double>& K, vector<double>& T, vector<double>& sig, int k, int t, int s);
void loadOLSmatrices(vector< vector<double> >& M, vector<double>& b, vector<OptionParam>& op);
void loadParametersFromFile(vector<OptionParam>& op, char* file, char* type);
void loadParametersFromVector(vector<OptionParam>& op,vector<double>& K,vector<double>& K_2,vector<double>& KT, vector<double>& T, vector<double>& sig);
void computeImpliedVols(vector<OptionParam>& op);
void loadRegressionMatrices(vector<vector<double> >& X,vector<double>& b, vector<OptionParam>& op);
void transpose(vector<vector<double> > & a,vector<vector<double> > & at);
void computeProduct(vector<vector<double> >&x,vector<vector<double> >&y,vector<vector<double> >& prod);
void computeProduct2(vector<vector<double> >&x,vector<double> &y,vector<double>& prod);
void ludcmp(vector<vector<double> >&a, int n, vector<int>& indx, double *d);
void lubksb(vector<vector<double> >&a, int n, vector<int>& indx, vector<double>& b);

int main()
{
    vector<vector<double> > A ( 5, vector<double> ( 5 ) );
    vector<double> b(5);
    vector<OptionParam> op;
    loadParametersFromFile(op,"Data.csv","call");

    cout << op.size()<<endl;
    printf("%lf,%d\n",op[0].price,op[0].K);

    computeImpliedVols(op);
	vector<vector<double> > _X ( (int)op.size(), vector<double> ( 5 ) );
	vector<double> _b((int)op.size() );
	loadRegressionMatrices(_X,_b,op);

	ofstream csvRegMatrix;
	csvRegMatrix.open("RegMatrix.csv");
	for (int i=0; i<(int)_X.size(); i++)
	{
		csvRegMatrix << _X[i][0] << ","<< _X[i][1] << ","<< _X[i][2] << ","<< _X[i][3] << ","<< _X[i][4]<<","<<_b[i] <<endl;
	}
	csvRegMatrix.close();

	vector<vector<double> > _Xt ( 5, vector<double> ( (int)op.size() ) );
	transpose(_X,_Xt);

	vector<vector<double> > _XtX ( 5, vector<double> ( 5 ) );
	computeProduct(_Xt,_X,_XtX);

	ofstream csvXtXMatrix;
	csvXtXMatrix.open("XtXMatrix.csv");
	for (int i=0; i<(int)_XtX.size(); i++)
	{
		csvXtXMatrix << _XtX[i][0] << ","<< _XtX[i][1] << ","<< _XtX[i][2] << ","<< _XtX[i][3] << ","<< _XtX[i][4] <<endl;
	}
	csvXtXMatrix.close();

	vector<double > _Xt_b ( 5);//, vector<double> ( (int)op.size() ) );
	computeProduct2(_Xt,_b,_Xt_b);

	vector<int> indx(5);
    double d ;
    vector<double> beta(5);
	int i,j;
	vector<vector<double> > _XtXinv ( 5, vector<double> ( 5 ) );
	vector<double> col (5);
    ludcmp(_XtX,5,indx,&d);
	for( j=0;j<5;j++){
		for(i=0;i<5;i++)	col[i]=0.0;
		col[j]=1.0;
		lubksb(_XtX,5,indx,col);
		for(i=0;i<5;i++) _XtXinv[i][j]=col[i];
	}
	computeProduct2(_XtXinv,_Xt_b,beta);
	cout<<beta[0]<<","<<beta[4]<<endl;

	system("pause");
}

Edited 7 Years Ago by peter_budo: Keep It Organized - For easy readability, always wrap programming code within posts in [code] (code blocks)

For better viewing
$ g++ -o mainUnix.out mainUnix.cpp
mainUnix.cpp: In function `int main()':
mainUnix.cpp:47: error: expected primary-expression before numeric constant
mainUnix.cpp:47: error: expected `;' before numeric constant
mainUnix.cpp:49: error: invalid initialization of non-const reference of type 'std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&' from a temporary of type 'int'
mainUnix.cpp:29: error: in passing argument 1 of `void loadRegressionMatrices(std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&, std::vector<double, std::allocator<double> >&, std::vector<OptionParam, std::allocator<OptionParam> >&)'
mainUnix.cpp:53: error: request for member `size' in `64', which is of non-class type `int'
mainUnix.cpp:55: error: invalid types `int[int]' for array subscript
mainUnix.cpp:55: error: invalid types `int[int]' for array subscript
mainUnix.cpp:55: error: invalid types `int[int]' for array subscript
mainUnix.cpp:55: error: invalid types `int[int]' for array subscript
mainUnix.cpp:55: error: invalid types `int[int]' for array subscript
mainUnix.cpp:60: error: invalid initialization of non-const reference of type 'std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&' from a temporary of type 'int'
mainUnix.cpp:30: error: in passing argument 1 of `void transpose(std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&, std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&)'
mainUnix.cpp:63: error: invalid initialization of non-const reference of type 'std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&' from a temporary of type 'int'
mainUnix.cpp:31: error: in passing argument 2 of `void computeProduct(std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&, std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&, std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&)'

#include <iostream>
#include <string>
#include <fstream>
#include <sstream> //because i use istringstream
#include <vector>
#include <valarray> // because we use exp() in the function N()
#include <math.h> // because we use fabs() in Bisect()
#define TINY 1.0e-20

using namespace std;
enum Type{put=0, call=1};
struct OptionParam{
double S;
int K;
double r;
double T;
double price;
double sigImpl;
Type putOrCall;
};
double BS_Price(double S,double K,double r,double T,double sig, char * optionType);
double N(double x);
double BS_Bisect(char* optionType,double S,double K,double r,double T,double a,double b,double realC);
double computeAvg(vector<double>& K, vector<double>& T, vector<double>& sig, int k, int t, int s);
void loadOLSmatrices(vector< vector<double> >& M, vector<double>& b, vector<OptionParam>& op);
void loadParametersFromFile(vector<OptionParam>& op, char* file, char* type);
void loadParametersFromVector(vector<OptionParam>& op,vector<double>& K,vector<double>& K_2,vector<double>& KT, vector<double>& T, vector<double>& sig);
void computeImpliedVols(vector<OptionParam>& op);
void loadRegressionMatrices(vector<vector<double> >& X,vector<double>& b, vector<OptionParam>& op);
void transpose(vector<vector<double> > & a,vector<vector<double> > & at);
void computeProduct(vector<vector<double> >&x,vector<vector<double> >&y,vector<vector<double> >& prod);
void computeProduct2(vector<vector<double> >&x,vector<double> &y,vector<double>& prod);
void ludcmp(vector<vector<double> >&a, int n, vector<int>& indx, double *d);
void lubksb(vector<vector<double> >&a, int n, vector<int>& indx, vector<double>& b);

int main()
{
vector<vector<double> > A ( 5, vector<double> ( 5 ) );
vector<double> b(5);
vector<OptionParam> op;
loadParametersFromFile(op,"Data.csv","call");

cout << op.size()<<endl;
printf("%lf,%d\n",op[0].price,op[0].K);

computeImpliedVols(op);
vector<vector<double> > _X ( (int)op.size(), vector<double> ( 5 ) );
vector<double> _b((int)op.size() );
loadRegressionMatrices(_X,_b,op);

ofstream csvRegMatrix;
csvRegMatrix.open("RegMatrix.csv");
for (int i=0; i<(int)_X.size(); i++)
{
csvRegMatrix << _X[i][0] << ","<< _X[i][1] << ","<< _X[i][2] << ","<< _X[i][3] << ","<< _X[i][4]<<","<<_b[i] <<endl;
}
csvRegMatrix.close();

vector<vector<double> > _Xt ( 5, vector<double> ( (int)op.size() ) );
transpose(_X,_Xt);

vector<vector<double> > _XtX ( 5, vector<double> ( 5 ) );
computeProduct(_Xt,_X,_XtX);

ofstream csvXtXMatrix;
csvXtXMatrix.open("XtXMatrix.csv");
for (int i=0; i<(int)_XtX.size(); i++)
{
csvXtXMatrix << _XtX[i][0] << ","<< _XtX[i][1] << ","<< _XtX[i][2] << ","<< _XtX[i][3] << ","<< _XtX[i][4] <<endl;
}
csvXtXMatrix.close();

vector<double > _Xt_b ( 5);//, vector<double> ( (int)op.size() ) );
computeProduct2(_Xt,_b,_Xt_b);

vector<int> indx(5);
double d ;
vector<double> beta(5);
int i,j;
vector<vector<double> > _XtXinv ( 5, vector<double> ( 5 ) );
vector<double> col (5);
ludcmp(_XtX,5,indx,&d);
for( j=0;j<5;j++){
for(i=0;i<5;i++)	col[i]=0.0;
col[j]=1.0;
lubksb(_XtX,5,indx,col);
for(i=0;i<5;i++) _XtXinv[i][j]=col[i];
}
computeProduct2(_XtXinv,_Xt_b,beta);
cout<<beta[0]<<","<<beta[4]<<endl;

system("pause");
}

Edited 7 Years Ago by axed: n/a

Well, for one thing system("pause"); is not portable. That only works on windows, not other POSIX-compliant systems. Therefore, cygwin wont like it.

Well, for one thing system("pause"); is not portable. That only works on windows, not other POSIX-compliant systems. Therefore, cygwin wont like it.

True, yep I am aware of that. But I think it doesn't affect the execution in any way.

I was thinking is there a problem with the vector of a vector part, am I allowed to mention the size at the time of declaration in unix:

vector<vector<double> > _Xt ( 5, vector<double> ( (int)op.size() ) );

Edited 7 Years Ago by axed: n/a

This article has been dead for over six months. Start a new discussion instead.