Maison >développement back-end >C++ >Pourquoi est-ce que j'obtiens des « Symboles non définis pour l'architecture i386 » lors de l'utilisation de variables statiques en C ?

Pourquoi est-ce que j'obtiens des « Symboles non définis pour l'architecture i386 » lors de l'utilisation de variables statiques en C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-20 19:35:12126parcourir

Why Am I Getting

Erreur : symboles non définis lors de la compilation avec la bibliothèque statique

Lors de la compilation du code C dans XCode, vous pouvez rencontrer le message d'erreur "Symboles non définis pour architecture i386." Cette erreur se produit généralement en raison de variables statiques non définies dans le code.

Détails du problème

Dans le code fourni, la classe Log a une variable statique theString déclarée dans l'en-tête. fichier Log.h mais n'est pas défini dans le fichier d'implémentation Log.cpp. Cela a pour conséquence que l'éditeur de liens ne parvient pas à résoudre la référence à la variable lors de la compilation.

Solution

Pour résoudre cette erreur, vous devez définir la variable statique dans l'implémentation fichier.

// Log.cpp
#include "Log.h"
#include <iostream>

string Log::theString;  // Define static here

void Log::method(string arg) {
    theString = "hola";
    cout << theString << endl;
}

Recommandation supplémentaire

Il est également recommandé de supprimer la ligne en utilisant l'espace de noms std ; du fichier d'en-tête car il pollue l'espace de noms global avec std partout où l'en-tête est inclus. Au lieu de cela, vous devez spécifier explicitement l'espace de noms std lorsque vous utilisez ses objets.

// Log.h
#include <iostream>
#include <string>

class Log {
public:
    static void method(std::string arg);

private:
    static std::string theString;
};

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn