【发布时间】:2015-06-20 02:53:48
【问题描述】:
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 控制台顺便说一句)。尝试了这么多线程,没有明确的答案。抱歉,如果它是重复的
【问题讨论】: