Pregunta

Bien,

Esto es lo que intento hacer ... En este momento se está compilando pero no se puede vincular ... LNK2001

Quiero que los métodos sean estáticos porque no hay variables miembro, sin embargo, también quiero que estén en línea para las aceleraciones que proporcionan.

¿Cuál es la mejor manera de hacer esto? Esto es lo que tengo en pocas palabras:

/* foo.h */
class foo
{
    static void bar(float* in);
};

/* foo.cpp */
inline void foo::bar(float* in)
{
    // some dark magic here
}

Estoy tratando de hacer esto porque quiero poder ir:

foo::bar(myFloatPtr);

foo no tiene ninguna variable miembro ... no tiene sentido.

¿Fue útil?

Solución

Si está llamando a la barra desde otro archivo cpp, que no sea foo.cpp, debe estar en un archivo de encabezado.

Otros consejos

Primero, los pondría en un espacio de nombres , porque no hay lógica en absoluto en esa " clase " . En segundo lugar, puede definir el cuerpo de las funciones en el archivo de encabezado directamente para permitir que el compilador las vea. De lo contrario, necesita optimización completa del programa para que el vinculador lo haga para incluir esas funciones (AFAIK).

Debe definir su función en línea en el archivo de encabezado, no en un archivo de implementación separado. Las definiciones son necesarias cuando el archivo de encabezado está #incluido, si se espera que estén en línea, después de todo.

El error de enlace que está viendo se debe a que la declaración (en el archivo de encabezado) no informa al compilador que el método debe estar en línea, mientras que la implementación está en línea, por lo que no está disponible para el enlace.

Generalmente, las funciones en línea se implementan donde se declaran (en el archivo de encabezado). El compilador es libre de incluir funciones en línea como las tiene, pero no puede forzar a que incorpore nada. Si está utilizando Visual C ++, habilite " en línea cualquier " ;, " generación de código de tiempo de enlace " y "favorecer el código rápido".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top