Bil*_*nde 4 c++ linker-errors multiple-definition-error
我得到了全局的上述消息链接器错误
const char* HOST_NAME = "127.0.0.1";
Run Code Online (Sandbox Code Playgroud)
我不认为我已经编译了两次文件,但这里是我对文件的定义.
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include "connection.hpp"
Run Code Online (Sandbox Code Playgroud)
#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"
Run Code Online (Sandbox Code Playgroud)
#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
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
Woj*_*wka 24
您对字符串常量使用了错误的声明.您需要使字符串成为常量,因为常量可以在多个编译单元中定义.这就是编译器不报告相同错误的原因BUFFSIZE:BUFFSIZE是const,因此可以在不同的编译单元中多次定义.但是HOST_NAME不是常数,所以据报道.HOST_NAME如果你将声明改为,那将是const
const char* const HOST_NAME = "127.0.0.1";
Run Code Online (Sandbox Code Playgroud)
然后错误就会消失.
[C++11: 3.5/3]:具有命名空间作用域(3.3.6)的名称具有内部链接(如果它的名称)
- 显式声明的变量,函数或函数模板
static; 要么,- 一个显式声明的变量,
const或constexpr既未显式声明extern也未声明具有外部链接的变量 ; 要么- 匿名联盟的数据成员.
这有效地使定义它的每个翻译单元保持"本地",从而消除冲突的机会.