/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Ny i C++
Fra : Carsten Højgaard


Dato : 13-06-02 14:59

Hej NG

Jeg får en compiler-fejl lige så snart jeg indsætter en for-løkke i en
funktion:

void resetKalender(void)
{
for (int mdr = 0; mdr < 12; mdr++)
for (int dato = 0; dato < 31; dato++)
kalender[mdr][dato] = 0;
}

Compiler output:
Warning W8027 Dato.cpp 37: Functions containing for are not expanded inline

Hvad gør jeg forkert?

/Carsten


 
 
Jonas Starup (13-06-2002)
Kommentar
Fra : Jonas Starup


Dato : 13-06-02 15:42


"Carsten Højgaard" <NOSPAM_dat00e14@it.vejlehs.dk> wrote in message
news:3D08A52C.9010101@it.vejlehs.dk...
> Hej NG
>
> Jeg får en compiler-fejl lige så snart jeg indsætter en for-løkke i en
> funktion:
>
> void resetKalender(void)
> {
> for (int mdr = 0; mdr < 12; mdr++)
=> {
> for (int dato = 0; dato < 31; dato++)
===> {
> kalender[mdr][dato] = 0;
===> {
=> {
> }
>
> Compiler output:
> Warning W8027 Dato.cpp 37: Functions containing for are not expanded
inline
>
> Hvad gør jeg forkert?
>
> /Carsten

Det har jeg ingen ide om. Men prøv lige at sætte nogle {} (se ovenfor) i din
kode, og så se hvad der sker. Man ved jo aldrig

Mvh Jonas




Carsten Højgaard (13-06-2002)
Kommentar
Fra : Carsten Højgaard


Dato : 13-06-02 16:50



Jonas Starup wrote:
> "Carsten Højgaard" <NOSPAM_dat00e14@it.vejlehs.dk> wrote in message
> news:3D08A52C.9010101@it.vejlehs.dk...
>
>>Hej NG
>>
>>Jeg får en compiler-fejl lige så snart jeg indsætter en for-løkke i en
>>funktion:
>>
>>void resetKalender(void)
>>{
>> for (int mdr = 0; mdr < 12; mdr++)
>
> => {
>
>> for (int dato = 0; dato < 31; dato++)
>
> ===> {
>
>> kalender[mdr][dato] = 0;
>
> ===> {
> => {
>
>>}
>>
>>Compiler output:
>>Warning W8027 Dato.cpp 37: Functions containing for are not expanded
>
> inline
>
>>Hvad gør jeg forkert?
>>
>>/Carsten
>
>
> Det har jeg ingen ide om. Men prøv lige at sætte nogle {} (se ovenfor) i din
> kode, og så se hvad der sker. Man ved jo aldrig
>
> Mvh Jonas


Det har jeg desværre allerede prøvet... med samme resultat.


Jonas Meyer Rasmusse~ (13-06-2002)
Kommentar
Fra : Jonas Meyer Rasmusse~


Dato : 13-06-02 16:30

"Carsten Højgaard" <NOSPAM_dat00e14@it.vejlehs.dk> wrote in message
news:3D08A52C.9010101@it.vejlehs.dk...
> Hej NG
>
> Jeg får en compiler-fejl lige så snart jeg indsætter en for-løkke i en
> funktion:
>
> void resetKalender(void)
> {
> for (int mdr = 0; mdr < 12; mdr++)
> for (int dato = 0; dato < 31; dato++)
> kalender[mdr][dato] = 0;
> }
>
> Compiler output:
> Warning W8027 Dato.cpp 37: Functions containing for are not expanded
inline

Det er en advarsel, om at den ikke kan inline en funktion der indeholder
for-løkker.
Du oversætter formentlig med et flag der beder compileren om at behandle
warnings som fejl.
Problemet kan løses ved at slå det flag fra, så den ignorerer at den ikke
kan inline funktionen.

Det er iøvrigt lidt mystisk, at den vil inline funktionen, da den funktion
du viser os ikke er markeret som
inline... det er formentlig fordi den i din egen version ligger i en klasse:

class foo
{
void resetKaldender()
{
for ...
}
}

Når implementationen ligger inde i klassen, så er det et udsagn om at
funktionen skal erklæres inline.

Så en anden måde at løse det på vil være at flytte implementation uden for
klassen:

class foo
{
void resetKalender();
}

//nedestående skal være ikke ligge i en headerfil

void foo::resetKaldender()
{
for...
}

mvh Jonas



Leo Laursen (13-06-2002)
Kommentar
Fra : Leo Laursen


Dato : 13-06-02 17:13

Thu, 13 Jun 2002 15:59:08 +0200, skrev Carsten Højgaard
<NOSPAM_dat00e14@it.vejlehs.dk>:
> Hej NG

> Jeg får en compiler-fejl lige så snart jeg indsætter en for-løkke i en
> funktion:

> void resetKalender(void)
> {
> for (int mdr = 0; mdr < 12; mdr++)
> for (int dato = 0; dato < 31; dato++)
> kalender[mdr][dato] = 0;
> }

> Compiler output:
> Warning W8027 Dato.cpp 37: Functions containing for are not expanded inline

Jeg forsøgte at følge nogle eksempler i en lidt ældre lærebog
(ældre er før 98 ). Der var løsningen at flytte initialiseringerne
uden for forløkken.
void resetKalender(void)
{
int mdr, dato;

for (mdr = 0; mdr < 12; mdr++)
for (dato = 0; dato < 31; dato++)
kalender[mdr][dato] = 0;
}
Jeg er ikke sikker på at fejlen er den samme; men måske.

Leo
--
<Knghtbrd> glDisable (GL_BUGS);
<Endy> heh
<Endy> Is that in 1.2? :)

Torben W. Hansen (13-06-2002)
Kommentar
Fra : Torben W. Hansen


Dato : 13-06-02 23:11

Jeg har rettet din kode lidt, da du har nogle syntax fejl. Desuden har jeg
af testhensyn tilføjet udskrift via cout, som du kan fjerne igen.

#include <iostream.h> // definerer cin og cout

int kalender[12][31], mdr, dato; // afhængig af scope kan dine variable
declareres her
int vent_her; // Kun for test, skal slettes i din version

void resetKalender(void)
{
// afhængig af scope kan dine variable declareres her

for (mdr = 0; mdr < 12; mdr++) // mdr og dato skal declareres inden de
bruges
{ // når du har mere end 1 line i for-løkke skal du sætte {}
for (int dato = 0; dato < 31; dato++)
{
kalender[mdr][dato] = 0;
cout << kalender[mdr][dato]; // Kun for test, skal slettes i din
version
}
}
}

int main(int argc, char *argv[])
{
resetKalender();
cin >> vent_her; // Kun for test, indtast en karakter + ENTER for at
afslutte program
return 0;
}


--
med venlig hilsen
Torben W. Hansen


"Carsten Højgaard" <NOSPAM_dat00e14@it.vejlehs.dk> skrev i en meddelelse
news:3D08A52C.9010101@it.vejlehs.dk...
> Hej NG
>
> Jeg får en compiler-fejl lige så snart jeg indsætter en for-løkke i en
> funktion:
>
> void resetKalender(void)
> {
> for (int mdr = 0; mdr < 12; mdr++)
> for (int dato = 0; dato < 31; dato++)
> kalender[mdr][dato] = 0;
> }
>
> Compiler output:
> Warning W8027 Dato.cpp 37: Functions containing for are not expanded
inline
>
> Hvad gør jeg forkert?
>
> /Carsten
>



Igor V. Rafienko (14-06-2002)
Kommentar
Fra : Igor V. Rafienko


Dato : 14-06-02 03:19

[ Torben W. Hansen ]

> Jeg har rettet din kode lidt, da du har nogle syntax fejl.


Hvis du forteller oss hva _du_ har rettet, skal jeg fortelle deg
hvilke _nye_ feil du har innført.





ivr, forvirret
--
C++: "an octopus made by nailing extra legs onto a dog"
            -- Steve Taylor, 1998

Torben W. Hansen (14-06-2002)
Kommentar
Fra : Torben W. Hansen


Dato : 14-06-02 07:38

"Igor V. Rafienko" <igorr@ifi.uio.no> skrev i en meddelelse
news:xjvadpyk3fg.fsf@mira.ifi.uio.no...
> [ Torben W. Hansen ]
> Hvis du forteller oss hva _du_ har rettet, skal jeg fortelle deg
> hvilke _nye_ feil du har innført.
> ivr, forvirret

Til Igor V. Rafienko,

Koden nedenfor er skrevet af Carsten Højgaard, hvortil jeg har tilføjet
nogle få rettelser, hvilket er ment som en hjælp.
Koden er kompileret samt afprøvet og rettelserne fremgår af kommentarerne
anført med //.


int kalender[12][31], mdr, dato; // variable kan declareres her
int vent_her; // Kun for test, skal slettes i din version

void resetKalender(void)
{
// variable kan declareres her

for (mdr = 0; mdr < 12; mdr++) // mdr, dato skal declareres før de bruges
{ // når du har mere end 1 line i for-løkke skal du sætte {}
for (int dato = 0; dato < 31; dato++)
{
kalender[mdr][dato] = 0;
cout << kalender[mdr][dato]; // Skal slettes i din version
}
}
}


int main(int argc, char *argv[])
{
resetKalender();
cin >> vent_her; // Kun for test, indtast en karakter + ENTER for at
afslutte
return 0;
}


--
med venlig hilsen
Torben W. Hansen






"Carsten Højgaard" <NOSPAM_dat00e14@it.vejlehs.dk> skrev i en meddelelse
news:3D08A52C.9010101@it.vejlehs.dk...
> Hej NG
>
> Jeg får en compiler-fejl lige så snart jeg indsætter en for-løkke i en
> funktion:
>
> void resetKalender(void)
> {
> for (int mdr = 0; mdr < 12; mdr++)
> for (int dato = 0; dato < 31; dato++)
> kalender[mdr][dato] = 0;
> }
>
> Compiler output:
> Warning W8027 Dato.cpp 37: Functions containing for are not expanded
inline
>
> Hvad gør jeg forkert?
>
> /Carsten
>




Igor V. Rafienko (14-06-2002)
Kommentar
Fra : Igor V. Rafienko


Dato : 14-06-02 14:39

[ Torben W. Hansen ]

[ snip ]

> > Hvis du forteller oss hva _du_ har rettet, skal jeg fortelle deg
> > hvilke _nye_ feil du har innført.
>
> Til Igor V. Rafienko,
>
> Koden nedenfor er skrevet af Carsten Højgaard, hvortil jeg har tilføjet
> nogle få rettelser, hvilket er ment som en hjælp.


_Hvordan_ skulle forslagene dine fjerne "feilen" som Carsten slet med:

[ sitat ]

Compiler output:
Warning W8027 Dato.cpp 37: Functions containing for are not expanded
inline

[ /sitat ]

Det beste forslaget hittil kan man lese i
<URL:news:aeadpu$qnf$1@eising.k-net.dk>. Du har valgt derimot å
innføre iallfall én feil (hint: <iostream>, ikke <iostream.h>). Den
opprinnelige postede koden hadde ikke det.

Gikk jeg glipp av noe vesentlig i undervisningstaktikken din?


> Koden er kompileret samt afprøvet og rettelserne fremgår af
> kommentarerne anført med //.


Hvilke rettelser, FCOL?


> int kalender[12][31], mdr, dato; // variable kan declareres her
> int vent_her; // Kun for test, skal slettes i din version
>
> void resetKalender(void)
> {
> // variable kan declareres her
>
> for (mdr = 0; mdr < 12; mdr++) // mdr, dato skal declareres før de bruges
> { // når du har mere end 1 line i for-løkke skal du sætte {}
> for (int dato = 0; dato < 31; dato++)
> {
> kalender[mdr][dato] = 0;
> cout << kalender[mdr][dato]; // Skal slettes i din version
> }
> }
> }


Har du _lest_ den opprinnelige koden i det hele tatt?





ivr
--
C++: "an octopus made by nailing extra legs onto a dog"
            -- Steve Taylor, 1998

Byrial Jensen (14-06-2002)
Kommentar
Fra : Byrial Jensen


Dato : 14-06-02 16:43

Torben W. Hansen <mail@ins-intersoft.com> skrev:
>
> Til Igor V. Rafienko,

Jeg er enig i Igors svar, men har lige en bemærkning:

> for (mdr = 0; mdr < 12; mdr++) // mdr, dato skal declareres før de bruges
> { // når du har mere end 1 line i for-løkke skal du sætte {}

1) Man må gerne erklære variable i for-sætninger.
2) Det kommer ikke an på antallet af linjer, men på antallet af
indeholdte sætninger om der skal sættes {} i en for-sætning.

Der var ingen fejl i originalen på nogen af disse punkter.

Torben W. Hansen (14-06-2002)
Kommentar
Fra : Torben W. Hansen


Dato : 14-06-02 20:23

I har ret.

Jeg var lidt for hurtig, selvom det oprigtigt var ment ...

Af en eller anden årsag fik jeg compileringsfejl med den oprindelige kode.

Efter din (Byrial Jensen) feedback testede jeg den oprindelige kode igen og
må konstatere at den virker.

Jeg beklager den dårlige hjælp...


--
med venlig hilsen
Torben W. Hansen


"Byrial Jensen" <bjensen@nospam.dk> skrev i en meddelelse
news:slrnagk3tf.16e.bjensen@ask.ask...

> Jeg er enig i Igors svar, men har lige en bemærkning:
>
> > for (mdr = 0; mdr < 12; mdr++) // mdr, dato skal declareres før de
bruges
> > { // når du har mere end 1 line i for-løkke skal du sætte {}
>
> 1) Man må gerne erklære variable i for-sætninger.
> 2) Det kommer ikke an på antallet af linjer, men på antallet af
> indeholdte sætninger om der skal sættes {} i en for-sætning.
>
> Der var ingen fejl i originalen på nogen af disse punkter.



Rasmus Kaae (14-06-2002)
Kommentar
Fra : Rasmus Kaae


Dato : 14-06-02 16:06

> Compiler output:
> Warning W8027 Dato.cpp 37: Functions containing for are not expanded
inline

Hvis du bruger Visual C++ bør du nok kigge i hvordan compileren er sat op
til at håndtere "inlinede" funktioner.



Søg
Reklame
Statistik
Spørgsmål : 177496
Tips : 31968
Nyheder : 719565
Indlæg : 6408491
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste