MacでC++コードを書いています。コンパイル時にこのエラーが発生するのはなぜですか?:
アーキテクチャi386の未定義シンボル: "Log :: theString"、参照元:libTest.a(Log.o)ldのLog :: method(std :: string)ld:アーキテクチャi386のシンボルが見つかりませんclang:エラー:リンカコマンドが終了コード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 ;
};
Log.cpp ----
#include "Log.h"
#include <ostream>
void Log::method(string arg){
theString = "hola";
cout << theString << endl;
}
この方法で、テストコードから「メソッド」を呼び出しています。「Log :: method( "asd"):」
ご協力いただきありがとうございます。
cpp
ファイルで静的を定義する必要があります。
Log.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
でグローバル名前空間が汚染されます。
static string theString;
を宣言しましたが、定義していません。
含める
string Log::theString;
cpp
ファイルに