hab "kann nicht in einem Konstanten-Ausdruck" bei Verwendung der Vorlage

template < int >  
  class CAT  
  {};  

  int main()  
  {  
     int i=10;  
     CAT<(const int)i> cat;  
     return 0; //here I got error: ‘i’ cannot appear in a constant-expression  
  }  

sogar

   int i=10;  
   const int j=i;  
   CAT<j> cat; //this still can not work

aber ich habe umwandeln i, const int ,warum der compiler immer noch Fehler melden ?

meine Plattform ist ubuntu,gcc version 4.4.3

Dank,

==============

Dank allen für Ihren Beitrag, aber in einigen Fällen,ich brauche eine nicht-const-variable ,

Beispiel:

  //alloperations.h   
  enum OPERATIONS  
  {  
       GETPAGE_FROM_WEBSITE1,  
       GETPAGE_FROM_WEBSITE2,  
       ....  
  };  


  template< OPERATIONS op >  
  class CHandlerPara  
  {  
       static string parameters1;         
       static string parameters2;         
       ....  
       static void resultHandler();  
  };     


  //for different operations,we need a different parameter, to achieve this  
  //we specified parameters inside CHandler, for  example  

  template<>  
  string CHandlerPara< GETPAGE_FROM_WEBSITE1 >::parameters1("&userid=?&info=?..")  

  template<>  
  string CHandlerPara< GETPAGE_FROM_WEBSITE1 >::parameters2("...")  

anderen Modul wird mit dieser Vorlage die entsprechenden parameter

und vielleicht specilize die resultHandler-Funktion für ein besonderes Verhalten

  • Denken Sie daran: Eine Menge Zeit, wenn Sie Fehler erhalten, auf einer Linie, es ist eine Menge Zeit, eine Linie oben. Als James' Antwort zeigt.
  • Nur weil ein Typ ist const bedeutet nicht, dass seine Wert ist.
  • Ich wiederhole: Nur weil ein Typ ist const bedeutet nicht, dass es Wert ist. Man könnte sagen f(rand()); oder int i = rand(). Nur Schmatzen const auf die Art nicht meine Sache.
  • Wo genau soll ich da einstellen? Erwarten Sie, dass die Benutzer zu liefern, das zur Laufzeit? Oder wird es bei der Kompilierung geändert werden? Wenn letzteres, dann mit einem command-line-Konstrukte wie "g++ -Di=10" und definieren nicht "int i" in Ihrem code. (Am besten mit einer mehr beschreibenden und eindeutigen Namen als "ich" in diesem Fall.)
  • Danke GMan,ich habe Ihre Idee
InformationsquelleAutor camino | 2010-10-21
Schreibe einen Kommentar