2010-01-22 7 views

Antwort

18
//Header File 
class test 
{ 
    const static char array[]; 
}; 

// .cpp 
const char test::array[] = { '1', '2', '3' }; 
+0

Dank nur Arbeit war Ich bin mir nicht sicher, ob Sie das auf der Seite eines Mitglieds tun könnten. – user174084

+8

Keine statische in der Definition, bitte. –

+1

Warum upbooten Leute Code, der offensichtlich nicht kompiliert wird? –

42

Der beste Platz in einer Quelldatei zu tun

// Header file 
class test 
{ 
    const static char array[]; 
}; 

// Source file 
const char test::array[] = {'1','2','3'}; 

Sie initialisieren können, wie Sie Integer-Typen in der Klassendeklaration versucht sein würde; Alle anderen Typen müssen außerhalb der Klassendeklaration und nur einmal initialisiert werden.

+0

Sollte das nicht "... in der Klasse * Erklärung * ..." heißen? Ich dachte, '.h' wären Deklarationen und' .c' wären Definitionen, weshalb der Verweis auf einen Integer-Typ, der nur im Header deklariert wird, zu einem Compilerfehler führt: 'undefinierter Verweis auf test :: SOME_INTEGER'? (Ich weiß, das hört sich super pingelig und pedantisch an, und ich versuche nicht, schwierig zu sein; ich möchte nur sicherstellen, dass ich die richtige Terminologie verwende, also korrigiere mich definitiv, wenn ich falsch liege). – dwanderson

22

können Sie immer wie folgt vorgehen:

class test { 
    static const char array(int index) { 
    static const char a[] = {'1','2','3'}; 
    return a[index]; 
    } 
}; 

Ein paar nette Dinge über dieses Paradigma:

  • Keine Notwendigkeit für eine CPP-Datei
  • Sie tun können Überprüfung Bereich, wenn Sie wollen
  • Sie vermeiden, sich um die static initialization fiasco
sorgen zu müssen 0
+1

Ich konnte den Compiler nicht bekommen, dann '& a [1]' über mehrere Objekte konsistent zu sein. – Alex

+0

Für String-Literale ist dies perfekt! – sage

+2

Ihr Link "statische Initialisierung Fiasko" ist tot. – sergiol

5

nun in C++ 17, können Sie Inline-Variable

How do inline variables work?

A simple static data member(N4424):

struct WithStaticDataMember { 
    // This is a definition, no out­of­line definition is required. 
    static inline constexpr const char *kFoo = "foo bar"; 
}; 

In Ihrem Beispiel:

//Header File 
class test 
{ 
    inline constexpr static char array[] = { '1', '2', '3' }; 
}; 

sollte

Verwandte Themen