методы — Передача значений в вектор как член класса в переполнении стека

Я хотел бы передать значения в вектор из главной функции, где вектор инициализируется как функция-член класса vectorEx:
Вот код

Это делается при попытке перегрузки «+» для добавления элементов векторов.

#include <iostream>
#include <vector>

using namespace std;

class vectorEx
{
public:
vector<double> v(5);
static const int m = 5;
};

int main()
{
vectorEx a;
cout << a.m << endl;
(a.v).at(0) = 5;
return 0;
}

Я получаю следующие ошибки:

vectorInsideClasses.cpp:9:20: error: expected identifier before numeric constant
vectorInsideClasses.cpp:9:20: error: expected ‘,’ or ‘...’ before numeric constant
vectorInsideClasses.cpp: In function ‘int main()’:
vectorInsideClasses.cpp:22:7: error: ‘a.vectorEx::v’ does not have class type

Разве это не похоже на метод цепочки в Java?

Например в Java: System.out.println("Hello"), который так же, как (System.out).println("Hello")

1

Решение

C ++ не позволяет инициализировать нестатические члены в классе довольно как это. Официальный способ таков:

        vector<double> v = vector<double>(5);

К сожалению, Microsoft Visual Studio пока не поддерживает инициализацию нестатических элементов в теле, как это, поэтому вместо этого вы должны использовать конструктор.

class vectorEx
{
public:
vector<double> v;
static const int m = 5;

vectorEx() //the default constructor
: v(5) //initialize the non-static member
{
}
};
4

Другие решения

Прямая инициализация члена данных в классе невозможна. Компилятор перепутает скобки как объявление функции. Если ваш компилятор поддерживает C ++ 11, вы можете инициализировать это так:

vector<double> v = std::vector<double>(5);

В качестве альтернативы, если вы не можете использовать C ++ 11, вы можете инициализироваться через конструктор:

vectorEx() : v(5) { }
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector