переменные не инициализируются в моем конструкторе - PullRequest
0 голосов
/ 07 марта 2011

Итак, моя проблема проста: данные, которые я инициализирую в своем конструкторе, вообще не сохраняются.

В основном я указал на эту одну точку.У меня есть конструктор в классе

strSet::strSet(std::string s){
std::vector<std::string> strVector;
strVector.push_back(s);
}

, и в моем главном файле у меня есть

        else if(command == "s"){
        cout << "Declare (to be singleton). Give set element:";
        cin >> input >> single_element;
        vector_info temp;
        temp.name = input;
        strSet set(single_element);
        set.output();
        temp.vector = set;
        list.push_back(temp);
    }

, когда вызывается мой конструктор, и я проверяю длину моего вектора, ответ уместен,но потом, когда я проверяю длину моего вектора на выходе, он сбрасывается в 0?

Может кто-нибудь мне помочь, очень признателен !!!!!!!

EDIT

это мой .h файл

class strSet
{
private:
    std::vector<std::string> strVector;
    // This is initially empty (when constructed)
    bool isSorted () const;

public:
    strSet ();  // Create empty set
    strSet (std::string s); // Create singleton set

    void nullify (); // Make a set be empty
    bool isNull () const;
    int SIZE() const;

    void output() const;

    bool isMember (std::string s) const;

    strSet  operator +  (const strSet& rtSide);  // Union
    strSet  operator *  (const strSet& rtSide);  // Intersection
    strSet  operator -  (const strSet& rtSide);  // Set subtraction
    strSet& operator =  (const strSet& rtSide);  // Assignment

};  // End of strSet class

Ответы [ 5 ]

2 голосов
/ 07 марта 2011
strSet::strSet(std::string s){
   std::vector<std::string> strVector; //line 1
   strVector.push_back(s);             //line 2
}

Это ваш конструктор, и здесь вы сохраняете значение в локальном векторе, которое уничтожается при возврате из конструктора.Как вы ожидаете, что ваши данные будут сохранены в strSet?

Я полагаю, что вам нужно знать основы C ++ и класса, читая вводную книгу C ++ самостоятельно.Поэтому, пожалуйста, возьмите книгу и сначала прочтите ее;Вот список действительно хороших книг:

Полное руководство и список книг C ++

РЕДАКТИРОВАТЬ:

Если вы объявили strVectorкак член класса, тогда вам нужно удалить line 1.Тогда это будет работать.

1 голос
/ 07 марта 2011

Совет: в GCC для этого есть предупреждение компилятора. Используйте -Wshadow, чтобы поймать такие проблемы в будущем.

1 голос
/ 07 марта 2011

выглядит так, как будто ваше тело класса уже имеет strVector, поэтому вы объявили его снова в конструкторе, что было неправильно, потому что компилятор ссылался на ваш новый локальный strVector, а не на класс strVector.

вам нужно изменить конструктор на:

strSet::strSet(std::string s){
   strVector.push_back(s);
}
0 голосов
/ 07 марта 2011

Вы инициализируете локальную переменную стека в конструкторе strSet::strSet.Когда вы возвращаетесь из конструктора, все локальные переменные стека уничтожаются.

Способ исправить это - объявить переменную strVector как переменную члена класса.

Пример:

class strSet {
public:
  strSet(std::string s) {
    this->strVector.push_back(s);
  }

private:
  std::vector<std::string> strVector;
};
0 голосов
/ 07 марта 2011
std::vector<std::string> strVector;
strVector.push_back(s);

Это создает новый локальный вектор строк в вашем конструкторе и добавляет строку к нему.Когда конструктор выйдет, он уничтожит ваш вектор.Если вы хотите, чтобы strVector работал дольше, чем конструктор, сделайте его членом класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...