Je programme une matrice de gabarit avec multi-threading. je besoin de mon matrice pour pouvoir travailler avec cette ligne de code (que je ne peux pas changer, il est une demande de mon programme):Définition de la valeur C++ dans le fichier cpp et qualification supplémentaire
Matrix<Complex>::setParallel(false);
donc pour ce parallèle (qui est un bool décide si d'utiliser multi enfilage ou non) doit être statique.
Ainsi, au début je l'ai défini comme:
template<class T>
class Matrix
{
private:
...
public:
static bool parallel;
...
};
mais j'ai obtenu cette erreur:
... undefined reference to 'Matrix<int>::parallel'
après une recherche rapide je suis arrivé à cette question dans un débordement de pile: Undefined reference to a static member
alors je vais de l'avant et à ce que les réponses ont dit. donc je changé mon code pour:
template<class T>
class Matrix
{
private:
...
public:
static bool Matrix::paraller;
...
};
et maintenant j'obtenir cette erreur:
extra qualification 'Matrix<T>::' on member 'paraller' [-fpermissive]
(note: i aussi essayé statique "bool Matrice :: parallèle possible," à la place, n'a pas aidé .
maintenant je ne sais pas comment se débarrasser de l'erreur de qualification supplémentaire sans revenir la référence non définie à nouveau.
si cette matière, tout le code est un nom de fichier d: "Matrix.hpp", que je ne peux pas changer (une autre demande de mon projet).
que devrais-je faire?
Voir http://stackoverflow.com/questions/12573816/what-is-an-defined-reference-unresolved-external-symbol-error-and-how-do-i-fix – juanchopanza
Voir [Pourquoi les modèles seulement être implémenté dans le fichier d'en-tête?] (http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file) s'il vous plait. –
@juanchopanza Je ne vois nulle part dans ce fil où il couvre le cas de la variable statique dans un modèle de classe (ce qui n'est pas évident comment gérer) –