---
title: "Variabelinitialisering"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/149009-variabelinitialisering"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "pettsson"
published: "2006-07-13T11:19:26.000Z"
updated: "2006-07-15T18:46:50.000Z"
replies: 6
views: 489
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/149009-variabelinitialisering"
---

# Variabelinitialisering

## #1 — pettsson, 2006-07-13T11:19Z

Jag skapar en klass och har då två privata strömmar, input och output, samt en open-funktion. I open() vill jag initiera input och output:

```
class MinKlass {
public:
 MinKlass();

private:
 void open();
 std::ifstream input;
 std::ofstream output;
};

MinKlass::MinKlass() {
 open();
}

// Fler funktioner

void MinKlass::open() {
 MinKlass::output = std::ifstream("filnamn");
 MinKlass::input = std::ofstream("filnamn");
}
```

Detta get dock något kryptiskt felmeddelande om privata metoder och operator= i std::basic_ios. Om jag däremot i klassen deklarerar filen direkt:

```
class MinKlass {
public:
 MinKlass();

private:
 void open();
 std::ifstream input("filnamn");
 std::ofstream output("filnamn");
};
```

Fungerar det. Dock så måste jag få lite data från programmet först, så det fungerar inte i praktiken. Varför fungerar det på det här sättet? Om jag i open() skriver

```
void MinKlass::open() {
 MinKlass::output("filnamn");
 MinKlass::input("filnamn");
}
```

Så får jag "term does not evaluate to a function taking 1 arguments". Vad gör jag fel?
Kör Visual C++ 2005 Express Edition om det hjälper.

Permalänk: https://www.webforum.nu/p/149009

## #2 — Phorpher, 2006-07-13T12:58Z

> **pettsson skrev:**
>
> Jag skapar en klass och har då två privata strömmar, input och output, samt en open-funktion. I open() vill jag initiera input och output:
>
>
> ```
> class MinKlass {
> public:
>  MinKlass();
> 
> private:
>  void open();
>  std::ifstream input;
>  std::ofstream output;
> };
> 
> MinKlass::MinKlass() {
>  open();
> }
> 
> // Fler funktioner
> 
> void MinKlass::open() {
>  MinKlass::output = std::ifstream("filnamn");
>  MinKlass::input = std::ofstream("filnamn");
> }
> ```
>
> 
> Detta get dock något kryptiskt felmeddelande om privata metoder och operator= i std::basic_ios. Om jag däremot i klassen deklarerar filen direkt:
>
>
> ```
> class MinKlass {
> public:
>  MinKlass();
> 
> private:
>  void open();
>  std::ifstream input("filnamn");
>  std::ofstream output("filnamn");
> };
> ```
>
> 
> Fungerar det. Dock så måste jag få lite data från programmet först, så det fungerar inte i praktiken. Varför fungerar det på det här sättet? Om jag i open() skriver
>
>
> ```
> void MinKlass::open() {
>  MinKlass::output("filnamn");
>  MinKlass::input("filnamn");
> }
> ```
>
> 
> Så får jag "term does not evaluate to a function taking 1 arguments". Vad gör jag fel?
> Kör Visual C++ 2005 Express Edition om det hjälper.

Nu var det ett bra tag sedan jag kodade C++ men nog är det väl så att med MinKlass::output("yaddayadda") så försöker du referera till en statisk klassvariabel.

Använd **this** istället.

Permalänk: https://www.webforum.nu/p/1841996

## #3 — pettsson, 2006-07-13T13:58Z

Hm, det är möjligt... Jag har sysslat med java tidigare, så jag vet inte riktigt. Men det blir samma fel i alla fall, "Term does not evaluate to a function taking 1 argument"

Permalänk: https://www.webforum.nu/p/1842001

## #4 — Phorpher, 2006-07-13T14:10Z

> **pettsson skrev:**
>
> Hm, det är möjligt... Jag har sysslat med java tidigare, så jag vet inte riktigt. Men det blir samma fel i alla fall, "Term does not evaluate to a function taking 1 argument"

```
void MinKlass::open()
{
    this.output.open("filnamn");
    this.input.open("filnamn");
}
```

Permalänk: https://www.webforum.nu/p/1842003

## #5 — pettsson, 2006-07-13T14:38Z

Hum, det borde man kanske tänkt på... :r 
Tack!

Permalänk: https://www.webforum.nu/p/1842005

## #6 — Sang-drax, 2006-07-14T13:23Z

Du bör kanske göra så här istället:

```
MinKlass::MinKlass():
  input("filnamn"),
  output("filnamn")
{

}
```

 
och strunta i open()-funktionen eftersom den ändå anropas i konstruktorn.

Permalänk: https://www.webforum.nu/p/1842263

## #7 — pettsson, 2006-07-15T18:46Z

Ovanstående kod är förenklad, jag måste anropa några andra funktioner innan jag öppnar för skriv/läs. Annars hade det ju varit bättre.

Permalänk: https://www.webforum.nu/p/1842519

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/149009-variabelinitialisering
