Avatar billede kernelx Juniormester
13. december 2006 - 20:59 Der er 13 kommentarer og
1 løsning

fil i c++-class

hi, jeg vil gerne have en class, som arbejder med præcis en fil.
nu vil jeg gerne have file-handleren til at stå i "private"-parten af denne class

---
class test
{
    private:
        ???

    public:
        test(char*);
}

test::test(char* fileName)
{
    fstream classFile(fileName, ios::in|ios::out|ios::binary);
}
---

hvordan skal det se ud, hvis "classFile" skal være i "private:"?
problemet er, at hvis classFile åbner en fil i selve konstruktoren, så kan andre class-funktioner ikke arbejde med classFile pga. at classFile kun er defineret i
test::test(char* fileName);
Avatar billede bertelbrander Novice
13. december 2006 - 21:03 #1
class test
{
private:
  fstream classFile;

public:
    test(char*);
};

test::test(char* fileName) : classFile(fileName, ios::in|ios::out|ios::binary)
{
}
Avatar billede arne_v Ekspert
13. december 2006 - 21:05 #2
class test
{
    private:
        fstream *classFile;

    public:
        test(char*);
}

test::test(char* fileName)
{
    classFile = new fstream(fileName, ios::in|ios::out|ios::binary);
}

var vel oplagt
Avatar billede bertelbrander Novice
13. december 2006 - 21:06 #3
class test
{
private:
  fstream classFile;

public:
    test(char*);
};

test::test(char* fileName)
{
  classFile.open(fileName, ios::in|ios::out|ios::binary);
}
Avatar billede kernelx Juniormester
13. december 2006 - 21:16 #4
findes der også en mulighed, hvor man flexibelt kan ændre filen?
eller hvor jeg senere kan åbne filen - uden konstruktor?

---
class test
{
    private:
        fstream classFile;

    public:
        test(void);
        openFile(char*);
};

test::test(void)
{
    // filen bliver åbnet senere
}

void test::openFile(char* fileName) : classFile(fileName, ios::in|ios::out|ios::binary)
{
   
}
---

hos mig siger compileren, at man på denne måde kun må abne en fil inde i en konstruktor
Avatar billede kernelx Juniormester
13. december 2006 - 21:18 #5
ok - mens jeg har fortsættet spørgsmålet, blev der allerede svaret. jeg skal lige læse :-)
Avatar billede bertelbrander Novice
13. december 2006 - 21:44 #6
metoden med ": classFile(fileName, ios::in|ios::out|ios::binary)"
virker kun for constructor.

I openFile skal du bruge open:
classFile.open(fileName, ios::in|ios::out|ios::binary);
Avatar billede kernelx Juniormester
13. december 2006 - 23:16 #7
nu har jeg problemet, at jeg ikke kan få close(), seekg, osv. til at virke
---
class test
{
private:
  fstream classFile;

public:
    test(char*);
    void seekTest(int sp)
};

test::test(char* fileName)
{
  classFile.open(fileName, ios::in|ios::out|ios::binary);
}

void test::seekTest(int sp)
{
    this->ClassFile.seekg(sp); // virker ikke
}
---
Avatar billede bertelbrander Novice
13. december 2006 - 23:25 #8
Jeg kan ikke se problemet (ud over et manglende ; og et C der burde være c)

Dette virker:
#include <fstream>
#include <iostream>

using namespace std;

class test
{
private:
  fstream classFile;

public:
    test(char*);
    void seekTest(int sp);
    int tellTest();
};

test::test(char* fileName)
{
  classFile.open(fileName, ios::in|ios::out|ios::binary);
}

void test::seekTest(int sp)
{
    classFile.seekg(sp); // virker ikke
}

int test::tellTest()
{
  return classFile.tellg();
}

int main()
{
  test File("testing.cpp");
  cout << "Before: " << File.tellTest() << endl;
  File.seekTest(10);
  cout << "After: " << File.tellTest() << endl;
}
Avatar billede kernelx Juniormester
13. december 2006 - 23:27 #9
er der forskel på - om jeg bruger
  this->classFile.seekg(sp);
eller
    classFile.seekg(sp);
?

det er den eneste forskel, som jeg kan se
Avatar billede bertelbrander Novice
13. december 2006 - 23:30 #10
Nej, et er det samme.

Men dit er med C og mit er med c

Og du mangler et ; efter prototypen i class'en
Avatar billede kernelx Juniormester
14. december 2006 - 17:50 #11
husk at skrive svar - pga. points bertelbrander, arne_v
Avatar billede bertelbrander Novice
15. december 2006 - 00:39 #12
Jeg samler ikke på point.
Avatar billede arne_v Ekspert
15. december 2006 - 04:38 #13
jeg gør, men jeg ved ikke om du har haft nogen nytte af mit forslag om at bruge en pointer
Avatar billede arne_v Ekspert
15. december 2006 - 04:39 #14
nå hvis nu og såfremt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Netcompany A/S

Network Engineer

Cognizant Technology Solutions Denmark ApS

Data Architect

SporingsGruppen ApS

Backend-udvikler

Fonden DBK

.Net/C#-udviklere