2014-10-13 5 views
0

Я новичок в C++, пытаясь изучить параллельное программирование (исходящее из Basic), застрял довольно рано.C++ вектор в классе

class Particle{ 
private: 
    double p_x, p_y, v_x, v_y, mass 
public: 
    Particle(double px, double py, double vx, double vy, double m) : p_x(px), p_y(px), v_x(vx), v_y(vx), mass(m) {}; 
    vector<int> pos() {p_x, p_y}; //doesn't work, expects ';' 
    vector<int> vel() {v_x, v_y}; //doesn't work, expects ';' 
}; 

Я пытаюсь создать класс со свойствами pos и vel, обоими векторами. HNothing работал с тем, что я пытаюсь сделать - инициализация векторов, я думаю.

Может ли кто-нибудь сказать мне, как это сделать? Или, если не что-то вроде этого:

class Particle{ 
    private: 
     double p_x, p_y, v_x, v_y, mass 
    public: 
     Particle(double px, double py, double vx, double vy, double m) : p_x(px), p_y(px), v_x(vx), v_y(vx), mass(m) {}; 
     void SetPos(int x, int y) //pseudo code based on Basic 
     void GetPos() as Vector //pseudo code based on Basic 
    }; 

Заранее спасибо за ваше время, это было кирпичная стена для меня на некоторое время. Я смотрел через многие другие темы, такие как здесь, но я не знаю достаточно, чтобы адаптировать все это к моим потребностям, я думаю. Чтобы усложнить работу, я использую проект VS2012 Cuda 6.0, который иногда даже действует иначе, чем стандартный проект на C++. Вернулся к 6.0, потому что chrono отказался работать в 6.5. Будет использовать стандартный проект, но я не знаю, как (если возможно) интегрировать Cuda в него.

+0

Если вы хотите, чтобы векторы были членами данных, вам нужно «vector pos {some_int, some_other_int};'. Если нет, вы должны уточнить свой вопрос. – juanchopanza

+0

Этот вопрос кажется вне темы, потому что в примере содержится слишком много типографских ошибок, что код может быть исправлен, чтобы иметь смысл. –

+0

Нет, вы не можете инициализировать переменные-члены «inline», как вы, вы должны использовать список инициализаторов в конструкторе. Это не имеет никакого отношения к Cuda, это как указано на языке C++. –

ответ

1

() указывает, что они являются функциями, а не переменными; а остальная часть синтаксиса недействительна для определения функции. Либо сделать их переменные:

vector<int> pos {p_x, p_y}; 

или действительные функции:

vector<int> pos() {return {p_x, p_y};} 

Вы, вероятно, хотите, чтобы они были функции, так что они не дублируют значения других членов, и дают ожидаемые результаты если другие члены изменены.

+0

One проблема с первым примером заключается в том, что 'p_' также являются членами данных, а не инициализированы в этой точке. – juanchopanza

+0

@juanchopanza: Возможно; снова прочитав код, похоже, что они должны (возможно) быть функциями. Но они инициализируются после других членов, поэтому (если я не пропущу что-то) возьмут их ценности от них. –

+0

На самом деле, я был уверен, что инициализация элемента данных данных происходит до инициализации списка инициализаторов. – juanchopanza

Смежные вопросы