Multiple definition of a const char*
c++, linker-errors, multiple-definition-error
Solution
You use wrong declaration for your string. You need to make your string a constant, since constants may be defined in several compilation units. This is why compiler does not report the same error for `BUFFSIZE`: `BUFFSIZE` is const, so it may be defined several times in different compilation units. But `HOST_NAME` is not const, so it is reported. `HOST_NAME` will be const if you change its declaration to
const char* const HOST_NAME = "127.0.0.1";
Then the error should disappear.
`[C++11: 3.5/3]:` A name having namespace scope (3.3.6) has internal linkage if it is the name of
- a variable, function or function template that is explicitly declared `static`; or,
- a variable that is explicitly declared `const` or `constexpr` and neither explicitly declared `extern` nor previously declared to have external linkage; or
- a data member of an anonymous union.
This effectively makes the constant "local" to each translation unit in which it is defined, removing the opportunity for conflict.
Problem
I get the above message linker error for a global ``` const char* HOST_NAME = "127.0.0.1"; ``` I don't think that I have compiled some files twice but here's my definition of the files anyway. main.cpp ``` #include <cstdio> #include <cstdlib> #include <cstring> #include <string> #include "connection.hpp" ``` connection.cpp ``` #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <sys/socket.h> #include <sys/types.h> #include <netdb.h> #include <arpa/inet.h> #include "connection.hpp" ``` connection.hpp ``` #ifndef __connection__ #define __connection__ #include <unistd.h> #include <netinet/in.h> const int BUFFSIZE = sysconf(_SC_PAGESIZE); //Define page size const char* HOST_NAME = "127.0.0.1"; //Local host //Definition of a class #endif ``` Any help?