static variable link error

C++XcodeStatic LibrariesClangStatic Methods

C++ Problem Overview


I'm writing C++ code on a mac. Why do I get this error when compiling?:

> Undefined symbols for architecture i386: "Log::theString", > referenced from: > Log::method(std::string) in libTest.a(Log.o) ld: symbol(s) not found for architecture i386 clang: error: linker command failed with > exit code 1 (use -v to see invocation)

Not sure if my code is wrong or I have to add additional flags to Xcode. My current XCode configurations are the default ones for a 'static library' project.

My code:

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; 
}

I'm calling the 'method' from a test code, in this way: 'Log::method("asd"):'

thanks for your help.

C++ Solutions


Solution 1 - C++

You must define the statics in the cpp file.

Log.cpp

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

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

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

You should also remove using namespace std; from the header. Get into the habit while you still can. This will pollute the global namespace with std wherever you include the header.

Solution 2 - C++

You declared static string theString;, but haven't defined it.

Include

string Log::theString;

to your cpp file

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsubzeroView Question on Stackoverflow
Solution 1 - C++Luchian GrigoreView Answer on Stackoverflow
Solution 2 - C++Lol4t0View Answer on Stackoverflow