Estoy tratando de escribir un envoltorio simple alrededor de un puntero de conexión que lo devolverá al grupo cuando se destruya el envoltorio, pero no se compilará porque ConnectionPool y AutoConn se necesitan mutuamente para ser declarado.Compilación de C++ cuando dos clases se refieren entre sí
Intenté usar la deceleración hacia adelante pero no funcionó. ¿Cómo puedo solucionar esto? (Con g ++)
class Connection {};
class ConnectionPool
{
Connection *m_c;
public:
AutoConn getConn()
{
return AutoConn(this, m_c); // by value
}
void releaseConnection(Connection *c)
{
}
};
class AutoConn
{
ConnectionPool* m_pool;
Connection *m_connection;
public:
AutoConn(ConnectionPool* pool, Connection *c) : m_pool(pool), m_connection(c) {}
~AutoConn()
{
m_pool->releaseConnection(m_connection);
}
};
diseño esta es una MALA idea, ¡debería intentar eliminar la dependencia circular! – NomeN
bueno, es un problema localizado y el beneficio de no tener que preocuparse por la liberación de la conexión (frente a posibles excepciones) supera con creces la "maldad" de este problema de diseño. –
posible duplicado de http://stackoverflow.com/questions/2233149/two-classes-and-inline-functions –