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.
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include "connection.hpp"
#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"
#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?
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
orconstexpr
and neither explicitly declaredextern
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.