-
function prototype
Hi
The following function declaration doesn't work. It takes object flowfield and returns object matrix_square.
Code:
matrix_square eigenvalue(flow_field, flow_field);
matrix_square eigenvalue_plus(flow_field &ob, flow_field &ob1)
{
int i;
matrix_square temp;
for (i = 0; i < Grids; i++)
temp.ptr[i] = ob.ptr[i]; //Element 11
for (i = 4*Grids; i < 5*Grids; i++)
temp.ptr[i] = ob.ptr[i - 4*Grids] + ob1.ptr[i - 4*Grids]; //Element 22
for (i = 8*Grids; i < 9*Grids; i++)
temp.ptr[i] = 0; //Element 33
return temp;
}
-
It's usually easiest to copy and paste in order to avoid issues like this.
Code:
matrix_square eigenvalue(flow_field &, flow_field &);
?
Leaving the parameter name in there costs you nothing.
-
I get the following error when I declare:
Code:
matrix_square eigenvalue(flow_field &, flow_field &);
matrix_square eigenvalue(flow_field &ob, flow_field &ob1)
{
int i;
matrix_square temp;
for (i = 0; i < Grids; i++)
temp.ptr[i] = ob.ptr[i]; //Element 11
for (i = 4*Grids; i < 5*Grids; i++)
temp.ptr[i] = ob.ptr[i - 4*Grids] + ob1.ptr[i - 4*Grids]; //Element 22
for (i = 8*Grids; i < 9*Grids; i++)
temp.ptr[i] = ob.ptr[i - 8*Grids] - ob1.ptr[i - 8*Grids]; //Element 33
return temp;
}
matrix_functions.C:110: error: ‘matrix_square’ does not name a type
-
Note the declaration is from a header file while the code itself is stored in a .C file
-
Make sure that matrix_square is declared before your function prototype, usually by including it's headerfile.
-
When I compile I type:
g++ -o supersonic_ob supersonic_ob.C matrix_functions.C -lm
supersonic_ob.C
Code:
//Declare header files
#include "matrix_square.H" //Class definition
#include "matrix_functions.H" //Function prototype
int main(){
flow_field ob, ob1;
matrix_square b;
b = eigenvalue_minus(ob, ob1);
}
matrix_function.C
Code:
matrix_square eigenvalue_minus(flow_field &ob, flow_field &ob1)
{
int i;
matrix_square temp;
for (i = 0; i < Grids; i++)
temp.ptr[i] = 0; //Element 11
for (i = 4*Grids; i < 5*Grids; i++)
temp.ptr[i] = 0; //Element 22
for (i = 8*Grids; i < 9*Grids; i++)
temp.ptr[i] = ob.ptr[i - 8*Grids] - ob1.ptr[i - 8*Grids]; //Element 33
return temp;
}
matrix_function.H
Code:
matrix_square eigenvalue_minus(flow_field &, flow_field &);
Hope I am clear enough.
-
All headers that are part of the translation unit are relevant and should be posted for any real analysis: can you also post "matrix_square.H"?
-
Here's matrix_square.H
Code:
class matrix_square {
public:
int i;
double *ptr;
matrix_square(){
ptr = new double[square_points];
assert( ptr!= 0);
for(i = 0; i < square_points; i++)
ptr[i] = 0;}
//copy constructor
matrix_square(const matrix_square &a){
int i;
ptr = new double[square_points];
for(i = 0; i < square_points; i++)
ptr[i] = a.ptr[i];
}
~matrix_square(){
delete [] ptr;
}
};
-
Does matrix_function.C #include "matrix_square.H"? It should, because it uses a matrix_square. (It should also #include "matrix_functions.H".)
Each .C file should #include any .h files that contain declarations it needs.
-
Thanks you guys, got it working.