2013-03-21 2 views
0

Я пытаюсь инициализировать указатель на структуру массива в моем конструкторе класса, но он не работает вообще ...Инициализировать указатель на массив

class Particles { 

private: 

    struct Particle { 
     double x, y, z, vx, vy, vz; 
    }; 

    Particle * parts[]; 

public: 

    Particles (int count) 
    { 
     parts = new Particle [count]; // < here is problem 
    } 

}; 
+0

В чем проблема? – kassak

+1

Это не указатель на массив, это массив указателей на 'Particle'. См. [This] (http://stackoverflow.com/questions/10252837/pointer-to-array-c). – m0skit0

+0

Вы можете сэкономить массу проблем, используя 'std :: vector ' вместо динамически распределенного массива. – juanchopanza

ответ

6

Удалить эти [] из декларации. Он должен быть

Particle *parts; 

Использование C++, вы можете использовать преимущества от std::vector:

class Particles { 
    // ... 

std::vector<Particle> parts; 

public: 

    Particles (int count) : parts(count) 
    { 

    } 
}; 
+0

просто интересно, можно ли использовать std :: array в этом случае. – balki

+2

@balki no, потому что 'count' не является постоянной времени компиляции. Но 'std :: vector ' будет делать хорошо. – juanchopanza

2
Particle * parts[]; 

Это массив указателей. Чтобы инициализировать это, вам нужно будет пройти через массив, инициализируя каждый указатель, чтобы указать на динамически выделенный объект Particle.

Вы, вероятно, хотите просто сделать parts указатель:

Particle* parts; 

Выражение new[] возвращает указатель на первый элемент массива - это Particle* - так что инициализация будет работать нормально.

1

Попробуйте это:

класса Частицы {

частное:

struct Particle { 
    double x, y, z, vx, vy, vz; 
}; 

Particle * parts; 

общественности:

Particles (int count) 
{ 
    parts = new Particle [count]; // < here is problem 
} 

};

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