Posts

Showing posts with the label inline

C++: Link errors caused by inline functions

Spanish version / Versión en Español When we want a C++ function to be inlined, that is, to have its calls replaced by its code in order to save the calling overhead, one way to achieve is to declare and define it in the .h file, and add the inline keyword. However, that's just a hint to the compiler, he'll decide whether to inline it or not. However, if we are keen on separating declaration and definition, we should declare the function in the .h file, without the inline keyword, and define it in the .cpp with the inline keyword. So far, so good. But there's a catch: If we go for the "cpp inline" approach, and the function is called from another compilation unit (.cpp), we'll get a linking error saying something like the function definition cannot be found. In this case, we have two choices: Place the function definition in the .h file, but outside of the class declaration. This avoids cluttering its interface. This way

C++: Errores de linking generados por el uso de inline

Versión en inglés / English version Cuando queremos que una función C++ sea inline, o sea, que sus llamadas sean reemplazadas en tiempo de compilación por su código a fin de evitar el overhead de la llamada, podemos definir la función dentro de la declaración de la clase y anteponer la palabra reservada inline. De todas formas, eso es sólo un "consejo" para el compilador, quien decidirá si le conviene o no. Si nos molesta tener que definir en el .h, podemos sólo declarar la función ahí sin la palabra reservada inline, y definirla en el .cpp con la palabra reservada inline. Hasta acá, todo bien. Pero puede haber problemas: si usamos inline en el cpp, y queremos usar esa función desde otra unidad de compilación (otro .cpp), nos saltará un error de link diciendo algo como que no logra encontrar la definición de la función. En este caso, si insistimos con usar inline, tenemos dos opciones: Poner la definición en el .h, pero afuera de la dec