создание переменной в конструкторе - PullRequest
1 голос
/ 20 декабря 2011

Возникли проблемы с пониманием области видимости переменной в структуре класса.

Я хочу создать несколько переменных в конструкторе класса и затем сделать их доступными для функций в этом классе. Я думал , что просто определение их в конструкторе будет работать, но мой компилятор (g ++) выдает мне ошибку: 'foo' не было объявлено в этой области.

Может кто-нибудь пролить свет на эту тривиальную проблему?

Вот некоторый фиктивный код, иллюстрирующий то, что я пытаюсь сделать.

myClass.h
using namespace std;
class myClass{

public:
    myClass(){
        std::vector<int> foo;
        foo.resize(10,0);
    };

    void myFunc();
}

myClass.cpp
void myClass::myFunc(){
    std::cout << foo[1] << end;
    // etc...
}

1 Ответ

5 голосов
/ 20 декабря 2011

Переменные, объявленные в конструкторе, выходят из области видимости в конце тела конструктора. Это ничем не отличается от других функций. Если вы хотите, чтобы переменные были доступны всем функциям-членам класса, вы должны сделать их переменными-членами.

Вы делаете это, объявляя их в теле класса. Э.Г.

class myClass {
public:
    myClass() {
        foo.resize(10,0);
    }

    void myFunc(); // now has access to foo

private:
    std::vector<int> foo;
};
...