endrebjo Skrevet 11. mars 2010 Del Skrevet 11. mars 2010 Da slår vi opp i referansen, og ser at vi også må legge til en makslengde. Lenke til kommentar
Senyor de la guerra Skrevet 11. mars 2010 Del Skrevet 11. mars 2010 Du funker endelig mitt lille skript Men ser det er ganske høyt informasjonstap. Lenke til kommentar
knutanha Skrevet 25. mars 2010 Del Skrevet 25. mars 2010 (endret) Hei! Jeg regner meg selv som nybegynner, å poster dette derfor her. Jeg trenger hjelp med syntaksen for å overlagre en arvet funksjon(fra en klasse) der jeg fortsatt vil bruke den gamle funksjonen i den nye. En forenklet utgave av de to klassene: #include <string> #include <cmath> #include <string> #include <sstream> using namespace std; #define PI 4.0 * atan(1.0) class Shape { public: Shape(string color, string line); //Konstruktør(duh //Definisjoner her {...} string toString(); //<--Funksjonen som skal overlagres. private: string color; string line; }; class Rectangle : public Shape { public: Rectangle(string color, string line, double width, double height); //Definisjoner her{...} string toString(); //<--Funksjonen som skal overlagres. private: double width; double height; }; //Denne funksjonen returnerer en string med all nødvendig info om et Shape-objekt string Shape::toString(){ stringstream ss; ss << "Color = " << color << ", Line = " << line; return ss.str(); } Øvingsoppgaven sier jeg skal overlagre toString() som Rectangle arvet fra Shape, men bruke toString() fra Shape likevel, bare legge til tilleggsfunksjonalitet. Altså skrive ut width og length også. Hvordan skal string Rectangle::toString(); se ut for å få til dette? takk på forhånd Edit: Fant det ut selv. string Rectangle::toString(){ stringstream ss; ss << Shape::toString() << ", Width = " << width << ", Length = " << length; return ss.str(); } Endret 25. mars 2010 av knutanha Lenke til kommentar
TheMaister Skrevet 25. mars 2010 Del Skrevet 25. mars 2010 Shape::toString() Hmm, må ikke Shape::toString() være deklarert som static for at man skal kunne kalle på den måten, eller går dette hvis funksjonen kalles fra et objekt som arver fra Shape? Lenke til kommentar
knutanha Skrevet 26. mars 2010 Del Skrevet 26. mars 2010 Shape::toString() Hmm, må ikke Shape::toString() være deklarert som static for at man skal kunne kalle på den måten, eller går dette hvis funksjonen kalles fra et objekt som arver fra Shape? Det kan virke som om det siste stemmer. Det jeg skrev kompilerer/virker ihvertfall i Visual C++(med tilhørende kompilator). Lenke til kommentar
Giddion Skrevet 26. mars 2010 Del Skrevet 26. mars 2010 Hei! Jeg regner meg selv som nybegynner..<snip> Ettersom du regner deg selv som en nybegynner må jeg bare pirke/kommentere at du bruke 'using namespace std' i noe jeg regner med er en header. Det er noe du ikke burde gjøre ettersom dette fort kan spre seg til store deler av programmet og da har du i praksis ødelagt poenget med namespace. Lenke til kommentar
knutanha Skrevet 26. mars 2010 Del Skrevet 26. mars 2010 (endret) Ettersom du regner deg selv som en nybegynner må jeg bare pirke/kommentere at du bruke 'using namespace std' i noe jeg regner med er en header. Det er noe du ikke burde gjøre ettersom dette fort kan spre seg til store deler av programmet og da har du i praksis ødelagt poenget med namespace. Ja, det jeg postet her var en blanding av en headerfil(definisjonene) og koden til de ulike funksjonene(som lå i en .cpp fil med samme navn). Opprinnelig i .h-filen brukte jeg kun std::-tags der jeg trengte det. En ting jeg lurer på er om det er best å skrive alle f.eks. string-variabler som std::string , eller om jeg heller burde bruke using std::string; øverst. Edit: Når jeg tenker meg om er det vel best å bruke std::-tags for å hindre spredning. Endret 26. mars 2010 av knutanha Lenke til kommentar
Requi Skrevet 29. mars 2010 Del Skrevet 29. mars 2010 (endret) // 290310 Test.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include <string> using namespace std; int main() { cout << "Would you like to have meat or bird for dinner tonight? "; string food; cin >> food; cin.ignore(); cout << "I'd also like to have " << food << " tonight!" << endl << endl; cout << "Do you want it medium cooked, or rare? "; string cooked; cin >> cooked; cin.ignore(); cout << "Alright, let's have the " << food << " " << cooked << " cooked." << endl << endl; cout << "I'm in a mood for a drink! What kind of drink would you like to have? "; string drink; cin >> drink; cin.ignore(); cout << "Well, that sounds like a nice choise." << endl; cout << "Let's have some " << drink << " with the " << food << "." << endl; cin.get(); cin.get(); return 0; } En tilsynelatende enkel og grei kode, am I right? Men har et lite problem (se vedlagt bilde). Det ene vinduet vil retten og sletten ikke bli krysset ut. Det går heller ikke ann å krysse det ut ved å bruke Ctrl-Alt-Del. Ingenting skjer. "Restart" eller "Shut Down" av PC'en fungerer heller ikke Eneste måten jeg kan få skrudd av PC'n er en hard restart (hold in teh button). Om jeg åpner programmet flere ganger kommer det opp flere Console vinduer, men de kan jeg krysse ut av. Det er bare denne ene som "sitter fast" !!! Herlighet, så irriterende. Er til å bli gal av. Hva er det som feiler koden, eller for den saks skyld, PC'en/programmet? Dette er ikke til å bli klok av. Bakgrunnen på bildet (koden) brukte jeg som hjelp til å få til en cin >> name; bare. Jeg bruker forresten Visual C++ 2008 Express Edition. Endret 29. mars 2010 av Requi Lenke til kommentar
Giddion Skrevet 29. mars 2010 Del Skrevet 29. mars 2010 (endret) Finner ikke noe galt i koden her og programmet fungerer utmerket. Fungerer det å stoppe programmet fra vs (ved å trykke på stop knappen)? Endret 29. mars 2010 av Giddion Lenke til kommentar
Requi Skrevet 29. mars 2010 Del Skrevet 29. mars 2010 Finner ikke noe galt i koden her og programmet fungerer utmerket. Fungerer det å stoppe programmet fra vs (ved å trykke på stop knappen)? Etter jeg hard-reset'et pc'en så har ikke dette skjedd. Men om dette skjer igjen (av en eller annen rar grunn) så skal jeg prøve dette, samt rapportere her! Er i startfasen av å lære meg C++, og ser fram til å lære meg flere ting enn "Hello World" og slikt jeg laget nå nettopp Lenke til kommentar
Watt Skrevet 2. april 2010 Del Skrevet 2. april 2010 (endret) nvm.. fant d ut.. Endret 3. april 2010 av Watt Lenke til kommentar
Leif.ross Skrevet 7. april 2010 Del Skrevet 7. april 2010 Hei igjen! etter god hjelp på mitt forrige spørsmål har jeg klart å lage noen programmer, men lurer nå på hvordan man installerer allegro, bruker mingw. Lenke til kommentar
JAPCU Skrevet 29. august 2010 Del Skrevet 29. august 2010 (endret) Søk "allegro mingw" Dette ser ut som en lovende guide selv om den fokuserer på C::B. http://wiki.allegro.cc/index.php?title=Code::Blocks Du må laste ned 2 ting. Allegro og DirectX SDK-et. De komplette SDK-ene bruker å være store (400-500MB), det finnes minimale versjoner her: http://alleg.sourceforge.net/wip.html Edit: heh. rimelig seint av meg å svare. mr-taco har vel funnet ut av det for lengst >< Endret 29. august 2010 av JAPCU Lenke til kommentar
Ståle Skrevet 16. september 2010 Del Skrevet 16. september 2010 (endret) Jeg har et kjapt spørsmål. Holder på å lage 2-dim tabell med pekere, og overlasting av (). Hvordan får jeg brukt () inne i samme objektet? int& Matrise::operator()( int i, int j ) { if( i < rader && i >= 0 && j < kolonner && j >= 0 ) return m[i][j]; else exit(1); } feks på Matrise Matrise::operator =(const Matrise& rightSide) { if (this!= &rightSide) //ulike objekter { for( int i = 0; i < rader; ++i ) delete [] m[i]; delete [] m; rader = rightSide.rader; kolonner = rightSide.kolonner; opprettMatrise(); for( int i = 0; i < rader; ++i ) { for( int u = 0; u < kolonner; u++ ) { this(i, u ) = rightSide(i, u ); // her } } return *this; } return *this; } feilmelding error: ‘this’ cannot be used as a function Endret 16. september 2010 av Ståle Lenke til kommentar
TheMaister Skrevet 16. september 2010 Del Skrevet 16. september 2010 Må være (*this)(i, u) is så fall. this er en peker. 1 Lenke til kommentar
Ståle Skrevet 16. september 2010 Del Skrevet 16. september 2010 Supert Det funket! Prøvde operator()(i, u ) akuratt nå, det så ut til å funke også, men jeg vet ikke hvor riktig det er. Det er vel mer riktig å bruke this? Lenke til kommentar
TheMaister Skrevet 16. september 2010 Del Skrevet 16. september 2010 ja, operator()(i, u) vil funke siden det implisitt er this->operator()(i, u), (eller (*this)(i, u)). Eneste forskjellen er hvor pen koden ser ut. Jeg hadde brukt (*this)(i, u); Lenke til kommentar
TheMaister Skrevet 19. september 2010 Del Skrevet 19. september 2010 Leker meg litt med C++0x, men får ikke helt til noe med variadic templates. Vil skrive en type-generisk adderer noe ala dette #include <iostream> using namespace std; template <class T> T sum(const T& in) { return in; } template <class T, class... P> auto sum(const T& t, const P&... p) -> decltype(t + sum(p...)) { return t + sum(p...); } int main() { cout << sum(5, 10.0, 22.2) << endl; } sum() skal generisk summere alle elementene og returnere med typen som argumentene har når de blir summert. Den funker for 1 og 2 argumenter, men med flere sier GCC at sum(int, double, double) ikke er definert osv. Jeg tror det er -> decltype(t + sum(p...)) som får den til å kødde siden p... har 2 argumenter i seg, men det bør være mulig for decltype å finne hvilken type sum(p...) har med rekursiv dedusering eller noe sånt. Noen som vet om decltype skal funke med variadiske argumenter? Hvis det er i standarden, er det GCC som ikke støtter dette enda? Lenke til kommentar
hallgeirl Skrevet 19. september 2010 Del Skrevet 19. september 2010 Leker meg litt med C++0x, men får ikke helt til noe med variadic templates. Vil skrive en type-generisk adderer noe ala dette #include <iostream> using namespace std; template <class T> T sum(const T& in) { return in; } template <class T, class... P> auto sum(const T& t, const P&... p) -> decltype(t + sum(p...)) { return t + sum(p...); } int main() { cout << sum(5, 10.0, 22.2) << endl; } sum() skal generisk summere alle elementene og returnere med typen som argumentene har når de blir summert. Den funker for 1 og 2 argumenter, men med flere sier GCC at sum(int, double, double) ikke er definert osv. Jeg tror det er -> decltype(t + sum(p...)) som får den til å kødde siden p... har 2 argumenter i seg, men det bør være mulig for decltype å finne hvilken type sum(p...) har med rekursiv dedusering eller noe sånt. Noen som vet om decltype skal funke med variadiske argumenter? Hvis det er i standarden, er det GCC som ikke støtter dette enda? Du vil vel gjerne kalle sum<T, P> (eks. sum<double, double>) istedetfor bare sum. Lenke til kommentar
GeirGrusom Skrevet 19. september 2010 Del Skrevet 19. september 2010 Du vil vel gjerne kalle sum<T, P> (eks. sum<double, double>) istedetfor bare sum. Skal den ikke kunne ta de typene ut ifra sammenhengen? 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å