Glutar Skrevet 16. februar 2015 Del Skrevet 16. februar 2015 Er ikke så mye spesielt der. // Inkluderer headerfilen iostream. #include <iostream> // Definerer en klasse med navn Group. class Group { }; // Definerer main. int main(void) { // Deklarer en funksjon med navn Group som returnerer et objekt av type Group&. Group & Group(); } Ingen grunn til at dette ikke skal kompilerer. Prøver du derimot å kalle Group() vil du få en linkerfeil fordi du ikke har implementert funksonen. Lenke til kommentar
Emancipate Skrevet 16. februar 2015 Del Skrevet 16. februar 2015 Takk, jeg visste ikke at man kunne deklarere funksjoner inni funksjoner i C++. Lenke til kommentar
Lycantrophe Skrevet 16. februar 2015 Del Skrevet 16. februar 2015 Du kan deklarere overalt. Lenke til kommentar
Emancipate Skrevet 16. februar 2015 Del Skrevet 16. februar 2015 Over alt er relativt. int main(Group & Group() { } Lenke til kommentar
Emancipate Skrevet 17. februar 2015 Del Skrevet 17. februar 2015 Er det best practice å plassere en forward declare inni klassen som bruker den, eller utenfor? //Eller her? class Group { class Manager; // Her? Manager * manager; }; class Manager { Group g[20]; }; Lenke til kommentar
Lycantrophe Skrevet 17. februar 2015 Del Skrevet 17. februar 2015 Om du forward declarer inne i klassen blir den nested, så de har forskjellig semantikk. Inner class har tilgang på outers' private variabler, dvs den er implisitt friend. Lenke til kommentar
Emancipate Skrevet 17. februar 2015 Del Skrevet 17. februar 2015 (endret) Ok, det var snodig. Edit: slettet dumt spm. Endret 17. februar 2015 av Emancipate Lenke til kommentar
Lycantrophe Skrevet 17. februar 2015 Del Skrevet 17. februar 2015 (endret) Hvorfor er det så snodig? edit: innser nå hvordan det som spørsmål kan lede til verdens verste løype med rar C++-oppførsel. Endret 17. februar 2015 av Lycantrophe Lenke til kommentar
Emancipate Skrevet 17. februar 2015 Del Skrevet 17. februar 2015 Hvis du mente dette så virker det ikke: class Group { class Manager; private: int group_private; }; class Manager { void test2() { group_private; } }; Lenke til kommentar
Lycantrophe Skrevet 17. februar 2015 Del Skrevet 17. februar 2015 Fordi du ikke har gjort det riktig. class Group { public: class Manager; private: int group_priv; }; class Group::Manager { void foo( const Group& g ) { bar( g.group_priv + 2 ); } }; 1 Lenke til kommentar
Emancipate Skrevet 17. februar 2015 Del Skrevet 17. februar 2015 Ok, så selve klassen blir bare gyldig inni den andre klassen når det deklareres sånn. Da skjønner jeg. Lenke til kommentar
Lycantrophe Skrevet 17. februar 2015 Del Skrevet 17. februar 2015 (endret) Mja. Litt på samme måte som når du typedef'er noe inne i en klasse (som dette kan sees på som et tilfelle av). struct A { typedef int integral_type; }; void foo() { A::integral_type x = 0; } Endret 17. februar 2015 av Lycantrophe Lenke til kommentar
Ljóseind Skrevet 17. februar 2015 Del Skrevet 17. februar 2015 I min enkle verden skulle ikke C++ så mye å jobbe med av gangen her...Hvor kommer C++ inn? Koden din er ikke C++. Hahahaha Jo, sist jeg sjekket, så programmerte jeg i C++. Hvilket språk mente du at det likna på? Jeg vet ennå ikke hvorfor funksjonen min ga stack overflow etter 6 rekursjoner, men jeg har fått den til å virke nå, også får 7 og 8 rekursjoner (alt over 8 er uinteressant da den i så tilfelle ville skrive ut mer en 360 000 linjer med tekst. ) Lenke til kommentar
Lycantrophe Skrevet 17. februar 2015 Del Skrevet 17. februar 2015 Post gjerne hele programmet ditt. Lenke til kommentar
Emancipate Skrevet 17. februar 2015 Del Skrevet 17. februar 2015 Hahahaha Jo, sist jeg sjekket, så programmerte jeg i C++. Hvilket språk mente du at det likna på? Ligna på pseudokode for C++ eller Java. C++ bruker ikke end, men { og }. Og så bruker man ikke å skrive void foran et funksjonskall. Og så har du klippet bort selve delen av koden der problemet sikkert ligger, og erstattet det med en kommentar. Lenke til kommentar
Ljóseind Skrevet 17. februar 2015 Del Skrevet 17. februar 2015 Hehe, ops. Der har det gått litt vel fort i svingene. Hadde det der vært min opprinnelige kode hadde det ikke vært rart om jeg fikk feil under kjøring. Lenke til kommentar
Emancipate Skrevet 18. februar 2015 Del Skrevet 18. februar 2015 skrive ut mer en 360 000 linjer med tekst.Hvis du sender dette by value noe sted (f.eks. til utskriftfunksjonen) er det ikke rart om stacken blir full. Lenke til kommentar
Ljóseind Skrevet 1. mars 2015 Del Skrevet 1. mars 2015 Beklager for seint svar. Problemet fiksa seg etterhvert. Skjønner ikke hva jeg gjorde feil, men jeg gjorde nok ett eller annet dumt Lenke til kommentar
Ljóseind Skrevet 31. mars 2015 Del Skrevet 31. mars 2015 (endret) EDIT: Solved. Tidsmålingene ble gode da jeg sluttet å måle tidsbruk for hver gang og heller målte tidsbruk når man gjør oppgaven et hundretalls ganger. Hm, noen som kan noen gode måter for å måle tid nøyaktig i C++ 11? Jeg har prøvd å bruke: auto begin = std::chrono::high_resolution_clock::now(); //Gjøre oppgave som skal utføres auto end = std::chrono::high_resolution_clock::now(); std::cout << std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin).count() << "ns" << std::endl; Men det skrives ikke ut noe fornuftig i mer enn kanskje 40% av tilfellene jeg kjører koden. Hvis jeg prøver å kjøre koden flere ganger, skrives det ut "0 ns" opptil 8/10 ganger og maks 4/10 ganger skrives det ut et faktisk sannsynlig antall nanosekunder (f.eks. 4*10^7 ns). Nå forstår ikke jeg meg skikkelig på disse chronos-greiene, men så langt jeg kan se gjør jeg eksakt det samme hver gang. Endret 31. mars 2015 av Ljóseind Lenke til kommentar
Emancipate Skrevet 31. mars 2015 Del Skrevet 31. mars 2015 (endret) Man bør liksom måle sånn at man får over 300 millisekunder tid for å få jevne resultater. Endret 31. mars 2015 av Emancipate Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå