2011-06-22 163 views
5

Me estoy poniendo los siguientes errores:error: esperado id no calificado antes de '<' token |

preprocessor_directives.cpp|15|error: expected unqualified-id before '<' token| 
preprocessor_directives.cpp|26|error: expected `;' before "int"| 
||=== Build finished: 2 errors, 0 warnings ===| 
#include <iostream> 

using namespace std; 

// Avoid. Using #define for constants 
#define MY_CONST1 1000 

// Use. Equivalent constant definition 
const int MY_CONST2 = 2000; 

// Avoid. Using #define for function like macros 
#define SQR1(x) (x*x) 

// Use. Equivalent function definition 
inline template <typename T> 
T SQR2 (T a) { 
    return a*a; 
} 
// Writing #define in multiple lines 
#define MAX(a,b) \ 
((a) > (b) ? (a) : (b)) 

// Compile time flags 
#define DEBUG 

int main() 
{ 
    cout << "SQR1 = " << SQR1(10) << endl; 
    cout << "SQR2 = " << SQR2(10) << endl; 
    cout << "MAX = " << MAX(10,11) << endl; 
    cout << "MY_CONST1 = " << MY_CONST1 << endl; 
    cout << "MY_CONST2 = " << MY_CONST2 << endl; 

    return 0; 
} 
+0

el problema es la definición de la plantilla en línea. ¿Por qué usarías la palabra clave en línea aquí? – poseid

+0

+1 por 'Evitar. Usando #define para .... '. Mantenga el autoaprendizaje. Por cierto, también evite macro para 'MAX'. – Nawaz

+0

Lo obtuve de este sitio http://login2win.blogspot.com/2008/06/c-preprocessor-directives.html – pandoragami

Respuesta

9

Mover la palabra clave inline después de la palabra clave template.

template <typename T> inline 
T SQR2 (T a) { 
    return a*a; 
} 
6
template <typename T> 
inline T SQR2 (T a) { 
    return a*a; 
} 
Cuestiones relacionadas