определение вектора в структуре (c ++) - PullRequest
0 голосов
/ 03 мая 2018

Очень простой вопрос, но я пока не нашел ответа.

Я написал приложение, которое использует массив с постоянным предопределенным значением, которое определяет размер этого массива. Но теперь я хочу изменить это так, чтобы «список» теоретически мог быть бесконечным (я знаю, что это было бы практически невозможно). Для этого я хочу использовать вектор. Но когда я набираю следующее, это выдает ошибку:

edit (2): Написал случайно const и неверный параметр для функции push_back, вот окончательная версия, которая выдает ошибку.

#include "stdafx.h"
#include "string"
#include "vector"

using namespace std;

struct Board {
  vector <string> myVector;
  myVector.push_back("foo");
};

Сообщение об ошибке:
<error-type> Board::myVector This declaration has no storage class or type specifier.



Я думал, что векторы не работают в structs. Я слышал, что структуры - это простая вещь C, а векторы - больше C ++, может быть, поэтому? Но на самом деле я понятия не имею, поэтому я спрашиваю здесь:)



редактировать (1): Я только что дал вам визуальную ошибку студии, может быть, я должен дать вам ошибки компилятора ..: error C3927: '->': trailing return type is not allowed after a non-function declarator error C3484: syntax error: expected '->' before the return type error C3613: missing return type after '->' ('int' assumed) error C3646: 'push_back': unknown override specifier error C2059: syntax error: '(' error C2238: unexpected token(s) preceding ';'

1 Ответ

0 голосов
/ 03 мая 2018

Проблема заключается в следующем:

  • (corrected in OP question) myVector определяется const
  • myVector.push_back(1); отсутствует в теле функции.
  • (corrected in OP question) Значение, переданное myVector.push_back(1);, равно int, но vector имеет тип string

Измените его следующим образом. Смотрите пример программы , работающей здесь :

#include "string"
#include "vector"
#include "iostream"

using namespace std;

struct Board {
    vector<string> myVector;

    void push_back(string val)
    {
        myVector.push_back(val);
    }

    void print()
    {
        for (auto it = myVector.begin(); it != myVector.end(); ++it)
            cout << " | " << *it;
    }
};

int main()
{
    Board b;
    b.push_back("Value 1");
    b.push_back("Value 2");

    b.print();

    return 0;
}

ОБНОВЛЕНИЕ:

(can you actually use push_back for a vector in a struct without creating an extra function?)

Нет. structure может иметь только data members и member functions. но вы можете использовать initializer-list для инициализации вектора следующим образом:

vector<string> myVector{"IVal 1", "IVal 1"};

Если вы хотите поставить значение initlize всегда в конце, используйте vector.insert() вместо vector.push_back().

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