1. ホーム
  2. c++

static variable link error [duplicate] 静的変数リンクエラー [重複] 静的変数リンクエラー

2023-10-11 09:06:01

質問内容

MacでC++のコードを書いています。なぜコンパイル時にこのようなエラーが出るのでしょうか?

アーキテクチャi386の未定義シンボル: "Log::theString", から参照されています。 libTest.a(Log.o) の Log::method(std::string) ld: symbol(s) not found for architecture i386 clang: error: linker command failed with the exit code 1. 終了コード 1 (呼び出しを確認するには -v を使用します)

私のコードが間違っているのか、Xcode に追加のフラグを追加しなければならないのか、よくわかりません。私の現在の XCode 設定は、「静的ライブラリ」プロジェクト用のデフォルトのものです。

私のコードです。

Log.h------------

#include <iostream>
#include <string>

using namespace std;

class Log{
public:
    static void method(string arg);
private:
    static string theString ;
};

ログ.cpp ----.

#include "Log.h"
#include <ostream>

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

テストコードから、このように「メソッド」を呼び出しています。 'Log::method("asd"):' です。

ご協力ありがとうございました。

どのように解決するのですか?

静止画を定義するためには cpp ファイルで定義する必要があります。

ログ.cpp

#include "Log.h"
#include <ostream>

string Log::theString;  // <---- define static here

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

また using namespace std; を削除してください。今のうちにその習慣を身につけましょう。これはグローバル名前空間を std でグローバルな名前空間を汚染します。