C ++ class [] оператор странный вывод - PullRequest
0 голосов
/ 17 апреля 2020

В следующем коде я ввожу вектор строк, который должен быть списком сообщений. Затем оператор [] должен вернуть мне указанное сообщение. Например, если я введу:

vector<string> m = {
    "Element 0",
    "Attack - at - midnight",
    "Element 2"};

в следующий класс, сказав: SelfDestructingMessage sdm(m);, то sdm[1]; должно вернуть "Attack - at - midnight". Однако вместо этого я получаю "\xA0\xABO\xF2\x98U\0\0 at - midnight". Любые советы в правильном направлении будут с благодарностью!

class SelfDestructingMessage { // This is my class, fairly straight forward
    private:
        vector<string> messages_;
    public:
            // Constructor
        SelfDestructingMessage(vector<string>);
            // Getter
        vector<string> messages() const {return messages_;}
            // Overloaded Operator
        string const& operator[](size_t);
}

SelfDestructingMessage::SelfDestructingMessage(vector<string> messages){ // Constructor
    messages_ = messages;
}

string const& SelfDestructingMessage::operator[](size_t index){ // Having trouble here
    long signed_index = index;
    string const& message = messages().at(signed_index);
    return message;
}

1 Ответ

2 голосов
/ 17 апреля 2020

Функция messages возвращает временную копию вектора. Этот временный вектор завершит свое время жизни, как только выражение messages().at(signed_index) будет завершено, и все обращения к элементам в нем будут недействительными.

Ваша функция messages должна вместо этого вернуть ссылку на вектор:

vector<string> const & messages(void) const;
...