solarwind schrieb:
Kann mir jemand sagen, was ich falsch gemacht habe?
Jein. Deine Frage ist zu schwammig. Weiters wäre es gut, wenn Du Dein Problem auf ein Minimalbeispiel reduziert hättest (compilierbar) bei dem der Fehler auftritt und dazu eine Fehlerbeschreibung, die es offensichtlich macht, was du als Fehler ansiehst.
Dein Problem ist wahrscheinlich (Glaskugelmode ein ;)), dass du Pointer verwendest, wo sie nicht wirklich nötig sind und den copy-ctor von Teilchen nicht oder nicht richtig implementiert hast.
Hier mal ein Beispiel zum rumspielen:
#include <ctime> /* time( ) */
#include <cstdlib> /* rand( ) */
#define _USE_MATH_DEFINES /* Nicht Standard C++ */
#include <cmath> /* M_PI */
#include <list> /* std::list */
#include <iostream>
template< typename T >
class vector_r3_t {
private:
T m_x, m_y, m_z;
public:
const T &x, &y, &z;
vector_r3_t( ) : m_x( ), m_y( ), m_z( ), x( m_x ), y( m_y ), z( m_z ) { }
vector_r3_t( T x, T y, T z ) : m_x( x ), m_y( y ), m_z( z ), x( m_x ), y( m_y ), z( m_z ) { }
};
template< typename T >
std::ostream& operator<<( std::ostream &output_stream, const vector_r3_t< T > &object ) {
return output_stream << "Vector: [ " << object.x << " | " << object.y << " | " << object.z << " ]";
}
template< typename T >
class particle_t {
public:
typedef T vector_t;
private:
double m_mass;
bool m_charge;
T m_position, m_heading;
public:
const double &mass;
const bool &charge;
const T &position, &heading;
particle_t( ) :
m_mass( ), m_charge( ), m_position( ), m_heading( ),
mass( m_mass ), charge( m_charge ), position( m_position ), heading( m_heading )
{ }
particle_t( double mass, bool charge, const T &position, const T &heading ) :
m_mass( mass ), m_charge( charge ), m_position( position ), m_heading( heading ),
mass( m_mass ), charge( m_charge ), position( m_position ), heading( m_heading ) { }
};
template< typename T >
std::ostream& operator<<( std::ostream &output_stream, const particle_t< T > &object ) {
output_stream << "Mass: " << object.mass << "\nPolarity: " << ( object.charge ? "positive\n" : "negative\n" );
return output_stream << "Position " << object.position << "\nHeading " << object.heading;
}
int main( ) {
typedef particle_t< vector_r3_t< double > > particle_r3_t;
typedef std::list< particle_r3_t > particle_r3_list_t;
particle_r3_list_t particle_list;
std::srand( static_cast< unsigned int >( std::time( 0 ) ) );
particle_list.push_back( particle_r3_t( std::rand( ), true, particle_r3_t::vector_t( 1, 1, 1 ), particle_r3_t::vector_t( M_PI, M_PI, 0 ) ) );
particle_list.push_back( particle_r3_t( std::rand( ), true, particle_r3_t::vector_t( 2, 2, 2 ), particle_r3_t::vector_t( M_PI * 2, M_PI * 2, 0 ) ) );
particle_list.push_back( particle_r3_t( std::rand( ), true, particle_r3_t::vector_t( 3, 3, 3 ), particle_r3_t::vector_t( M_PI * 3, M_PI * 3, 0 ) ) );
while( particle_list.size( ) ) {
std::cout << "Particle:\n" << particle_list.front( ) << "\n" << std::endl;
particle_list.pop_front( );
}
}
greetz, Swordfish