|
| 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.
| |
|
|