Gå til innhold

Bone's Offisielle C++ hjelpetråd


Anbefalte innlegg

getlinene i koden kopierer det du har skrevet i cin fram til newline er funnet.

mulig jeg tar feil angående ignore, men det virker som om den sletter restene i cin.

 

Tips:

Jeg syntes www.cplusplus.com funker bra til å slå opp funksjoner, mulig du også vil like den.

Ok, takk. I boka står ignore() forklart som: Funksjonen ignore() gjør det mulig og hoppe over tegn i inn bufferet. Funksjonskallet ingore(10, #) vil hoppe over forekomstene av #, men maks 10 ganger.

 

Skjønner ikke helt hvorfor det står der det står. Hvorfor ikke la være å bruke getline() og bare bruke en normal cin setning f. eks?

Lenke til kommentar
Videoannonse
Annonse
<snip>

Skjønner ikke helt hvorfor det står der det står. Hvorfor ikke la være å bruke getline() og bare bruke en normal cin setning f. eks?

 

Hvis du stryker linjen og skriver inn "123 123" når den spør etter alder så skjønner du hvorfor :cool:

Den fjerner rester som måtte ligge igjen fra cin >> alder siden den stopper å lese fra cin når den treffer space eller endline, hvis du ikke legger inn en space når den spør etter alder vil du ikke merke noe.

Lenke til kommentar

Leker med c++!

 

Hva kan jeg ha gjort annerledes med følgende kode:

Leker med å lage en sånn log skriver! så jeg kan se hva som blir gjort i et program! Den er heeelt simpel! Men sånn må det være i starten :p

 

main.cpp

#include "logWriter.h"

int main()
{
LogWriter log("test.txt");
log.add("lol!");
return 0;
}

 

logWriter.cpp

#include "logWriter.h"

LogWriter::LogWriter(char *file)
{
filename = file;
}

void LogWriter::add(char *content)
{
using namespace std;

ofstream logFile(filename, ios::app);

if (!logFile) {
	return;
}

logFile << content << endl;

return;
}

 

logWriter.h

#ifndef LOG_WRITER_H
#define LOG_WRITER_H

#include <iostream>
#include <fstream>
#include <string>

class LogWriter
{
private:
	LogWriter();

	char *filename;

public:
	LogWriter(char *filename);

	void add(char *content);
};

#endif

 

Jeg må innrømme jeg ble glad når jeg fikk denne til å funke! :D

Tips?

Lenke til kommentar
<snip>

Tips?

Jeg elsker at folk spør om det :love:

 

1. Du kan og bør sende data som ikke skal endres som const. Kort sagt legg const før char * i funksjonene dine.

2. Jeg syntes du burde bruke std::string og ikke char* i c++ kode.

3. Etter en rask kikk ser det ikke ut som headeren trenger noen av filene du includerer (iostream, fstream, string). Legg alt slikt (som man ikke trenger i headeren) i source filen. Hvis du gjør det slipper du at andre headere som inkuderer logWriter.h får med de andre på kjøpet.

4. Jeg er ikke helt sikker på hvordan using namespace std; fungerer inni et scope, men jeg liker ikke at det er inni et scope så jeg ville lagt det i toppen av source filen

 

edit:

5.!!!

Ops.. jeg så ikke en alvorlig feil i koden din ... vel jeg regner med du ikke mente det slik. På linje 5 i source filen kopierer du ikke tekst strengen men du kopierer bare pekeren til tekststrengen. Dette er en meget alvorlig feil og det er etter min mening bare flaks at programmet ditt overhode kjører.

Endret av Giddion
Lenke til kommentar

Giddion! Takk skal du ha! Fikk et lite understanding moment så vidt her! Her er hva jeg har gjort nå!

 

main.cpp

#include <iostream>
#include "logWriter.h"

int main()  
{  
using namespace std;

LogWriter log("shit.log");
log.add("Da starter vi logging :).");

return 0;  
}

 

logWriter.cpp

#include <fstream>
#include <string>
#include <time.h>

#include "logWriter.h"

using namespace std;

LogWriter::LogWriter(string file)
{
filename = file;
}

void LogWriter::add(string content)
{
ofstream logFile(filename.c_str(), ios::app);

if (!logFile) {
	return;
}

char date[9];
_strdate(date);

logFile << date << " - " << content << endl;

return;
}

 

logWriter.h

#ifndef LOG_WRITER_H
#define LOG_WRITER_H

using namespace std;

class LogWriter
{
private:
	LogWriter();

	string filename;

public:
	LogWriter(string filename);

	void add(string content);
};

#endif

 

Skal ta en omgang med de pekerne igjen... herk!

Igjen! Takk :)

Lenke til kommentar

Jeg har noe problemer med koden her:

 

#include <iostream>
#include <sstream>
#include "logWriter.h"

using namespace std;

void drawTicTacToeBoard(const char board, const int boardSize)
{
for (int y = 0; y < boardSize; y++)
{
	for (int x = 0; x < boardSize; x++)
	{
	/*
		ostringstream thisRow = "";

		if (x == 0 && y == 0) {
			thisRow << "  x";
		}
		else if (y == 0 && x != 0) {
			thisRow << " " << x << " ";
		}
		else 
		{
			if (board[x][y] == 'X') {
				thisRow << " X ";
			}
			else if (board[x][y] == 'O') {
				thisRow << " O ";
			}
			else {
				thisRow << "   ";
			}
		}
		*/

		cout << board[y][x] << endl;  /// DETTE ER LINJE 36!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	}

	// cout << thisRow.str() << endl;
}
}

int main()  
{	  
LogWriter log("shit.log");
log.add("Da starter vi logging :).");

const int boardSize = 9;
char board[boardSize][boardSize] = {'0'};

drawTicTacToeBoard(board[boardSize][boardSize], boardSize);

return 0;  
}

 

Er en feil: c:\c++\test\test\main.cpp(36) : error C2109: subscript requires array or pointer type

 

Linje 36 er merka godt!

Jeg skjønner ikke hva som er gale.

Endret av Erlend85
Lenke til kommentar
<snip>

Skal ta en omgang med de pekerne igjen... herk!

Igjen! Takk :)

 

Tar en omgang til jeg også da :)

1. Det å legge using namespace std; i en header er no-no ettersom det forandrer namespacet til alle som inkluderer headeren

2. Hva vil du oppnå med

if (!logFile) {
	return;
}

 

<snip>

Er en feil: c:\c++\test\test\main.cpp(36) : error C2109: subscript requires array or pointer type

 

Linje 36 er merka godt!

Jeg skjønner ikke hva som er gale.

 

Det som er feil er at board ikke er en array eller pointer.

Endret av Giddion
Lenke til kommentar

Du kan ikke sette en stack-allokert variabel lik null. Det er viktig at denne sletter seg selv riktig.

Det du derimot kan gjøre, er å skrive:

envariabelgreie = ostream([en streambuf greie]);

Men du kan ikke bruke ostream til å slette noe som helst... det er en stream, og ikke noe mer, den kan bare gi ifra seg informasjon.

Lenke til kommentar

...hæh?

 

Jeg tror det jeg skrev skal svare på spørsmålet ditt, men jeg tror du vet hva du vil, men du vet bare ikke hvordan.

Du vil slette det som står på skjermen, ikke sant?

Som sagt kan ikke ostream gjøre dette uten å fylle hele skjermen med mellomrom (den kan bare gi ifra seg informasjon til consolen)

Lenke til kommentar

Sorry! Var sløv forklaring. Jeg driver å lager det tic tac toe spillet. Jeg har da x og y koordinater. Jeg kjører fyrst en Y løkke, så en X løkke inni Y. Når X løkka har kjørt 9 ganger, skal alle denneStreamgreia << data; <-- tingene printes ut for hver Y. Men jeg definerer en ny stream greie for HVER y! Jeg hadde håpa jeg definere stream greier FØR Y, og bare pusse den ut. Eller er det same shit?

Lenke til kommentar
Sorry! Var sløv forklaring. Jeg driver å lager det tic tac toe spillet. Jeg har da x og y koordinater. Jeg kjører fyrst en Y løkke, så en X løkke inni Y. Når X løkka har kjørt 9 ganger, skal alle denneStreamgreia << data; <-- tingene printes ut for hver Y. Men jeg definerer en ny stream greie for HVER y! Jeg hadde håpa jeg definere stream greier FØR Y, og bare pusse den ut. Eller er det same shit?

 

....hæææ?......gruble gruble...... hæ?

 

Jeg er fortsatt ikke helt med (ble litt mye greier og ting), men jeg tror du prøve å lagre dataene for så printe ut alle linjene på en gang.. riktig?

 

Kan du ikke bruke std::string til å mellomlagre linjene?

 

skal alle denneStreamgreia << data; <-- tingene

Hva i alle dager er det du prøver å forklare her?

 

hvis du mener std::cout så skriv det hvis du mener ostream så skriv det. Det er mulig andre er mer med, men jeg er et stykke fra det.

Lenke til kommentar
  • 1 måned senere...

Hei!

 

Driver og leser litt på OOP, og har kommet til det med virtuelle funksjoner, men da stopper det...

 

Noen som kan forklare litt på norsk (Er vel ikke den beste i engelsk, i tillegg til at jeg går i 8. klasse. Er ikke fult utlært enda :p), blir litt sliten av lese side på side på engelsk om ting jeg ikke forstår med det første...

 

Leser kapittlet Polymorphism and Virtual Member Functions i boka Starting out with C++ From control structures through objects vis det har noe og si.

Endret av Rockie
Lenke til kommentar

Virtuelle funksjoner er metoder som kan byttes ut i sub-klasser.

 

class MyClass
{
public:
 virtual char* foo()
 {
return "This function can be overidden";
 }
};

class MyInheritedClass : public MyClass
{
public:
 virtual char* foo()
 {
return "This function has been overidden!";
 }
};

int main()
{
 MyClass *foo = new MyClass();
 cout << foo.foo() << endl;
 delete foo;

 foo = new MyInheritedClass();
 cout << foo.foo() << endl;
 delete foo;

 return 0;
}

 

I noen programmeringsspråk (Java og D) er alle funksjoner virtual som standard, og der skriver en final for å eksplisitt si at funksjonene ikke er virtual. I C++ derimot er alle funksjoner final med mindre de blir markert virtual.

Endret av GeirGrusom
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...