Я хотел бы передать значения в вектор из главной функции, где вектор инициализируется как функция-член класса 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")
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
{
}
};
Прямая инициализация члена данных в классе невозможна. Компилятор перепутает скобки как объявление функции. Если ваш компилятор поддерживает C ++ 11, вы можете инициализировать это так:
vector<double> v = std::vector<double>(5);
В качестве альтернативы, если вы не можете использовать C ++ 11, вы можете инициализироваться через конструктор:
vectorEx() : v(5) { }