[C++] 2 methodes in 1 bestand

Pagina: 1
Acties:

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 29-05 12:10
Beste gotters,

Ik ben bezig met een zeer simpel testbestandje in c++.

Ik heb een bestand genaamd fabs_help.c
hierin staat een main en een methode genaamd init_min_max_index()

C++:
1
2
3
4
5
6
7
int main() {
bla bla
}

void init_min_max_index(bla, bla, bla, bla) {
bla bla bla
}


Ik vraag me af of dit mag. Als ik het compileer door middel van:
code:
1
gcc fabs_help.c -o fabs_help

dan krijg ik de volgende error
code:
1
fabs_help.c:55: error: expected ‘;’, ‘,’ or ‘)’ before ‘&’ token


Moet toegeven dat ik er alweer een tijdje tussenuit ben want heb vakantie gehad dus hersenen draaien op ong. 2% van de capaciteit :P

iRacing Profiel


  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05 17:51
Wil je die functie in int main willen kunnen gebruiken, dan moet je de prototype voor int main definiëren.

Verder kan ik hier vrij weinig van maken. Als dit het probleem niet is, zul je wat specifiekere code moeten geven.

  • user109731
  • Registratie: Maart 2004
  • Niet online
Wat is je vraag nu precies? Natuurlijk mag je twee of meer functies in een bestand hebben, dat had je ook zelf kunnen vinden.

Wat staat er op regel 55?

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 29-05 12:10
Oke ik dacht dus ook dat dit mogelijk was. Hier zal ik mijn complete code even geven. Misschien ziet iemand wat er mis mee is. Ik had al gekeken op cpp website, en was ervan overtuigd dat het gewoon mag zoals ik het nu doe...

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <time.h>

void init_min_max_index(const float x1, // source
        const float x2, // end point
        const int index_x2, // voxel index of end point
        const float start_plane, // first plane
        const float end_plane, // first plane
        const int dim, const float delta,const float dx,
        int &iXmin, int &iXmax,float &alpha_min)
{
    if( fabs(delta) <= fEps )
    {
        iXmin =0; iXmax = 0;
    }

    // first calculate the indices
    const float fXentry = (x1 - start_plane)/dx; // index of source/entry point
    printf("fXentry = %f\n", fXentry);
    if(delta <0 ) // i.e. x2 >  x1 
    {
        iXmin = index_x2+1;
        iXmax = (int) fXentry;
    }
    else
    {
        iXmax = index_x2;
        iXmin = (int)( fXentry +1);
    }

    if(iXmin<0)  // out of range, i.e. x1 is not within the range.
        iXmin = 0;
    if(iXmax>=dim)
        iXmax=dim;

    if(iXmax < iXmin) // numerical instability!
    {
        if(delta <0 ) // i.e. x2 >  x1 
        {
            iXmax++;
        }
        else
        {
            iXmin--;  
        }
        //assert(iXmax >= iXmin);
    }

    if( iXmin != iXmax ) //fabs(delta) >= fEpsDivZero )
    {
        float alpha_start = (start_plane - x1) / delta;
        float alpha_end   = (end_plane - x1) / delta;
        float r2 = min(alpha_start,alpha_end);
        alpha_min = max(alpha_min,r2);

#ifdef __DEVICE_EMULATION__
        //printf("start_plane: %f end_plane: %f x1: %f \n",start_plane,end_plane, x1);
        //printf("alpha_min: %f alpha_start: %f alpha_end: %f \n",alpha_min,alpha_start, alpha_end);
#endif
    }
    /*
       else if(delta <= fEpsDivZero )
       {
       float alpha_start= (x1- start_plane ) / delta;
       float alpha_end = 1.0;
       float r1 = min(alpha_start,alpha_end);
       alpha_min = max(alpha_min,r1);
#ifdef __DEVICE_EMULATION__
printf("alpha_start : %f alpha_min: %f \n",alpha_start, alpha_min);
#endif

}
*/


else // make it BIG
{
    alpha_min = 100;
}
}

int main() {
    const float fEps = 1e-5f;
    float c = 13.9999996;
    float a = 10.0;
    float b = fabs(a);
    printf("fEps = %f\n",fEps);
    printf("a = %1f\tb = %1f\n",a,b);
    printf("c = %i\n", (int)c);
    //-----------------------------------------
    float x1 = 10.0f;
    float y1 = 10.0f;
    float dx = 2.0f;
    float dy = 2.0f;
    float start_plane_x = 0.0f;
    float end_plane_x = 8.0f;
    float start_plane_y = 0.0f;
    float end_plane_y = 8.0f;

    float delta_x;
    float delta_y;

    int i;
    int j;

    int dimx = 4;
    int dimy = 4;

    int i_min, i_max;
    int j_min, j_max;

    float alpha_x_min = 0.0f;
    float alpha_y_min = 0.0f;

    for(i=0; i<dimx-1; i++) {
        delta_x = start_plane_x + (0.5 + i) * dx - x1;
        printf("delta_x = %f\n",delta_x);
        for(j=0; j<dimy-1; j++) {
            delta_y = start_plane_y + (0.5 + j) * dy - y1;
            printf("delta_y = %f\n",delta_y);
        }
    }
}


Nu loopt de compiler dus te mekkeren over regel 13 dat is net voor de opening accolade van de functie init_min_max_index()

code:
1
2
/home/jcvaneijk/C Hulp programmas% gcc fabs_help.c -o fabs
fabs_help.c:13: error: expected ';', ',' or ')' before '&' token

iRacing Profiel


  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 18-11 14:22

Koppensneller

winterrrrrr

En als je je functies eens declareert in een .h bestand en deze include in je .cpp, wat gebeurt er dan?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:10

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je compileert een C++ bestand als C. Noem je bestand .cpp en roep g++ aan ipv gcc.

[ Voor 39% gewijzigd door .oisyn op 28-05-2008 12:03 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • pkuppens
  • Registratie: Juni 2007
  • Laatst online: 17-11 23:50
edit: delete
never mind, C vs. C++ issues.

[ Voor 118% gewijzigd door pkuppens op 28-05-2008 12:44 ]


  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 18-11 00:56
pkuppens schreef op woensdag 28 mei 2008 @ 12:38:
Ik ben C expert, dus misschien jok ik als het over C++ gaat, maar als je een adres mee wil geven als parameter in een functie definitie moet je < *data > gebruiken.
In het passen van adressen in de aanroep gebruik je wel < &data >
Dat zijn references, een C++ feature. Het is geen syntaxfout, in ieder geval. :)

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • pkuppens
  • Registratie: Juni 2007
  • Laatst online: 17-11 23:50
Jaap-Jan schreef op woensdag 28 mei 2008 @ 12:42:
[...]
Dat zijn references, een C++ feature. Het is geen syntaxfout, in ieder geval. :)
Zelf ook gezien dat het valide C++ is, maar .oisyn geeft het antwoord waardoor ik toch een beetje gelijk heb, het wordt als standaard C ge-interpreteerd.

g++ oid gebruiken, en/of cpp extensie geven.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:10

.oisyn

Moderator Devschuur®

Demotivational Speaker

pkuppens schreef op woensdag 28 mei 2008 @ 12:47:
g++ oid gebruiken, en/of cpp extensie geven.
Ik zat zelf even te twijfelen over die en/of. Volgens mij is alleen g++ gebruiken iig voldoende. Als je 'm een cpp extensie geeft compileert gcc 'm wel als C++, maar volgens mij wordt er dan nog niet standaard gelinkt met de C++ runtime libraries, dus het is sowieso handig om met g++ te compilen. En ik vind een C++ sourcefile met de .c extensie gewoon raar, dus kun je 'm imho beter ook gewoon .cpp noemen ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 29-05 12:10
.oisyn schreef op woensdag 28 mei 2008 @ 12:54:
[...]

Ik zat zelf even te twijfelen over die en/of. Volgens mij is alleen g++ gebruiken iig voldoende. Als je 'm een cpp extensie geeft compileert gcc 'm wel als C++, maar volgens mij wordt er dan nog niet standaard gelinkt met de C++ runtime libraries, dus het is sowieso handig om met g++ te compilen. En ik vind een C++ sourcefile met de .c extensie gewoon raar, dus kun je 'm imho beter ook gewoon .cpp noemen ;)
g++ did the trick. En het is niet .c maar .C wat wij hier gebruiken voor c++ files. Zo zit onze make in elkaar. Probleem is alleen dat als ik dan weer eens een los bestand maak en met de hand doe ik hem standaard dezelfde naamgeving geef en het dus wel eens fout gaat :P

Bedankt iig.

iRacing Profiel


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Anders heb je ook kans dat je libstdc++ expliciet moet meelinken; dus mocht je nog linker errors voor je kiezen kijgen: -lstdc++ ;)
Pagina: 1