导致ld:重复符号的原因

What is causing ld: duplicate symbol

本文关键字:符号 ld 导致      更新时间:2023-10-16

ld:重复符号字符串函数::中的intToString(int)

/Build/Intermediates/Y36PJC-mrvikmil.build/Debug/Y36PJC-mrvikmil.build/Objects-normal/x86_64/ServerSocket.o and 
/Build/Intermediates/Y36PJC-mrvikmil.build/Debug/Y36PJC-mrvikmil.build/Objects-normal/x86_64/main.o 

用于体系结构x86_64

函数StringFunctions::intToString(int)StringFunctions.h

包括main.cpp:

#include <iostream>
#include <string>
#include "Exception.h" //does not include anything more
#include "ServerConsole.h"
    /* 
       which includes ServerSocket.h which includes ClientSocket.h which includes StringFunctions.h
       AND
       ServerSocket.h includes SocketException.h which includes StringFunctions.h
    */

包括ServerSocket.cpp:

#include <iostream>
#include <string>
#include "InvalidPortException.h" //does not include anything more
#include "SocketException.h" //which includes StringFunctions.h
#include "ClientSocket.h"    //which includes SocketException.h which includes StringFunctions.h
#include "StringFunctions.h" //StringFunctions.h
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <errno.h>

我相信,只要我在.h文件中有东西,我就可以在任何地方包含几乎任何东西。。。

我的所有文件都包含guard(#ifndef…#define…)

请帮忙。

您必须将函数定义为inline或将其实现移动到cpp文件中。否则,它将存在于两个对象中,C++将不知道要链接哪一个(尽管它们是相同的)。

Include guard将避免在同一代码文件/对象中多次具有相同的标头。然而,他们不会避免在多个对象文件中有相同的代码,因为每个对象文件都是自己创建的,所有定义都重置了。