2010-06-28 5 views
1

J'ai une classe avec une variable statique: null.Variable de classe statique - utiliser avec les constructeurs

static Pointer<Value> Null; 

Le pointeur est une classe qui utilise la gestion de la mémoire de comptage de référence.

Cependant, je reçois une erreur: pas de fonction concordante pour appel à pointeur :: pointeur()

Sur la ligne:

Pointer<Value> Value::Null(new Value()); 

Merci.

Extrait de classe pointeur:

template <typename T> 
class Pointer 
{ 
public: 
    explicit Pointer(T* inPtr); 

Constructor Source

mPtr = inPtr; 
    if (sRefCountMap.find(mPtr) == sRefCountMap.end()) { 
    sRefCountMap[mPtr] = 1; 
    } else { 
    sRefCountMap[mPtr]++; 
    } 
+0

Cette définition est à portée globale dans un fichier source? –

+0

Pouvez-vous nous montrer plus de code? Que se passe-t-il dans votre constructeur? – wheaties

+0

A quelle classe appartient le membre 'Null'? - Je pense aussi qu'il y a probablement une meilleure façon de faire ce que vous voulez, par exemple. les classes de pointeurs intelligentes de Boost ou Boost.Optional. – Philipp

Répondre

0

Je suppose que votre classe est appelée Value.

// Header file 
class Value 
{ 
public: 
    ... 
    static const Pointer<Value> Null; 
}; 

// This should be in the cpp file. 
const Pointer<Value> Value::Null(new Value); 
+0

Je reçois toujours la même erreur si j'essaye cela – Maz

+2

Est-ce que l'hypothèse est incorrecte? Pouvez-vous montrer votre classe Value avec le membre statique Null? – stinky472

+0

Vérifiez également que la définition de classe pour votre modèle de pointeur est incluse dans le fichier cpp et que la valeur elle-même est incluse. – stinky472

1

La ligne:

static Pointer<Value> Null; 

est d'appeler le constructeur pointeur :: pointeur(). Il semble que votre classe Pointer ne possède pas un tel constructeur, mais a un constructeur qui accepte void*. Donc, essayez de le changer en

static Pointer<Value> Null(0); 
+0

Je reçois toujours l'erreur de cette façon. – Maz

+0

En regardant le code que vous avez maintenant posté, le problème est que vous avez déclaré votre constructeur comme «explicite». Cela signifie soit que vous devez supprimer le mot-clé 'explicit' ou utiliser' reinterpret_cast <0> 'ou créer un nouveau constructeur explicitement protégé pour' void * 'dans ce cas. – Gianni

0

je crois qu'il devrait être comme:

// In the header file. 
class Value 
{ 
public: 
    ... 
    static const Pointer<Value> Null; 
}; 

// In the cpp file. 
const Pointer<Value> Value::Null(reinterpret_cast<Value*>(0)); 
+0

Je reçois toujours l'erreur de cette façon. – Maz

Questions connexes