ホームページ >バックエンド開発 >C++ >C で静的変数を使用すると「アーキテクチャ i386 の未定義シンボル」が表示されるのはなぜですか?

C で静的変数を使用すると「アーキテクチャ i386 の未定義シンボル」が表示されるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-20 19:35:12194ブラウズ

Why Am I Getting

エラー: 静的ライブラリでコンパイルするときの未定義のシンボル

XCode で C コードをコンパイルすると、「未定義のシンボルが含まれています」というエラー メッセージが表示される場合があります。アーキテクチャ i386。」このエラーは通常、コード内の未定義の静的変数が原因で発生します。

問題の詳細

提供されたコードでは、クラス Log のヘッダーで宣言された静的変数 theString があります。ファイル Log.h は存在しますが、実装ファイル Log.cpp では定義されていません。この結果、リンカーはコンパイル中に変数への参照を解決できなくなります。

解決策

このエラーを解決するには、実装で静的変数を定義する必要があります。ファイル。

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

string Log::theString;  // Define static here

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

追加推奨事項

名前空間 std を使用して行を削除することも推奨されます。ヘッダーが含まれる場所であればどこでも std でグローバル名前空間を汚染するため、ヘッダー ファイルから削除されます。代わりに、オブジェクトを使用するときに std 名前空間を明示的に指定する必要があります。

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

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

private:
    static std::string theString;
};

以上がC で静的変数を使用すると「アーキテクチャ i386 の未定義シンボル」が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。