gpt4 book ai didi

c++ - ld : 2 duplicate symbols for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

转载 作者:行者123 更新时间:2023-11-28 06:12:38 25 4
gpt4 key购买 nike

PEBKAC 或 MAC 真的很笨。我有以下代码。

main.cpp

#include <iostream>

#include "Parser.h"

using namespace std;

const char *filename = "main.c";

int main()
{
cout<<"Parser"<<endl;

Parser *p = new Parser(filename);
p->parse();

return 0;
}

解析器.h


#ifndef PARSER_H
#define PARSER_H

struct Parser
{
Parser(const char* filename_);
bool parse();

private:
const char* filename;
};

Parser::Parser(const char* filename_):filename(filename_){}

#endif

解析器.cpp

#include "Parser.h"

#include <iostream>

bool Parser::parse()
{
std::cout<<"The file name is "<<filename<<std::endl;
return false;
}

当我尝试使用命令编译时出现以下错误

g++ Parser.cpp main.cpp

重复符号 __ZN6ParserC2EPKc 在: /var/folders/sh/3w74dm6n05jbtbv6hzx9f3_00000gn/T/Parser-7ddc8e.o /var/folders/sh/3w74dm6n05jbtbv6hzx9f3_00000gn/T/main-90a53f.o 重复符号 __ZN6ParserC1EPKc 在: /var/folders/sh/3w74dm6n05jbtbv6hzx9f3_00000gn/T/Parser-7ddc8e.o /var/folders/sh/3w74dm6n05jbtbv6hzx9f3_00000gn/T/main-90a53f.o ld:架构 x86_64 的 2 个重复符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

当我从 Parser.cpp 中删除“#include “Parser.h””时,此错误消失(如果我这样做,我将无法在 Parser.cpp 文件中定义任何函数)。不是在保护整个点避免重复符号?不确定为什么它在 MAC 中不起作用?(顺便说一句,我正在使用 MAC 控制台)。尝试了很多线程,没有明确的答案。抱歉,如果它是重复的

最佳答案

MAC:1 我:0

找到了答案,不知道为什么我在 Parser.h 文件中的类之外定义构造函数。我应该在类内或 .cpp 文件外定义它。这篇文章帮助我了解我做错了什么。

http://samwho.co.uk/blog/2013/12/08/duplicate-symbol-what/

解析器.h

结构解析器 { 解析器(const char* 文件名_); bool 解析();

  private:
const char* filename;
};

Parser::Parser(const char* filename_):filename(filename_){} <-- This is the problem, has to be either defined inside the class or outside in .cpp.

已修复。(应该更频繁地用 C++ 编写代码)。我想我不会删除线程,我觉得有人会需要它。找不到很多 g++ 资源。 (我想在 MAC 中使用 g++ 的人不多)

解析器.h

struct Parser
{
Parser(const char* filename_): filename(filename_){}
bool parse();

private:
const char* filename;
};

关于c++ - ld : 2 duplicate symbols for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30949790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com