编译c ++代码时出现重复符号错误

zeu*_*unk -3 c++ g++

我正在尝试使用终端中的g ++在os x上编译一些c ++代码.但是,我不断收到错误,我不确定它的含义.我有3个文件,main.cpp; comp_fns.cpp和comp_fns.h.Window和Gene是两个不同的类.这是错误:

g++ -Wall main.cpp comp_fns.cpp 
duplicate symbol Window::setValues(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)in:
    /var/folders/jf/3y93rsfd1n55q2qd75y0w0r00000gn/T//cc51aFZg.o
    /var/folders/jf/3y93rsfd1n55q2qd75y0w0r00000gn/T//cc2KNfcB.o
duplicate symbol Gene::setValues(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)in:
    /var/folders/jf/3y93rsfd1n55q2qd75y0w0r00000gn/T//cc51aFZg.o
    /var/folders/jf/3y93rsfd1n55q2qd75y0w0r00000gn/T//cc2KNfcB.o
ld: 2 duplicate symbols for architecture x86_64
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,如果需要我可以发布代码.编辑:我没有#include一个cpp文件到另一个.这是我的头文件,我认为问题可能出在那里.这是我的第一个cpp程序,所以可能会有一些明显的错误.我最初用C语言编写它并将其改为c ++,因此我可以学习如何做到这两点.

#ifndef __Compare_Data_C____comp_fns__
#define __Compare_Data_C____comp_fns__

#include <iostream>
#include <cstdlib>
#include <string>
#include <sstream>

using namespace std;

class Window {
public:
    int start, stop, length;
    double average;
    string strandID, locations;
    void setValues(string locs, string strand, string length, string avg);
};

class Gene {
public:
    int start, stop;
    string strandID, genes;
    void setValues(string locs, string strand, string spcGene);
};


void Window::setValues(string locs, string strand, string a_length, string avg) {
    locations = locs;
    vector<string> token(3);
    istringstream iss(locs);
    for (int i=0; i<3; i++) {
        getline(iss, token[i], '.');
    }
    start = atoi(token[0].c_str());
    stop  = atoi(token[2].c_str());
    strandID = strand;
    length = atoi(a_length.c_str());
    average = atof(avg.c_str());
}

void Gene::setValues(string locs, string strand, string givenGene) {
    vector<string> token(3);
    istringstream iss(locs);
    for (int i=0; i<3; i++) {
        getline(iss, token[i], '.');
    }
    start = atoi(token[0].c_str());
    stop  = atoi(token[2].c_str());
    strandID = strand;
    genes = givenGene;
}

int getSize(string inputID, string strandID, const int header);
void getWindows(vector<Window> &win, string inputID, const int header);
void getGenes(vector<Gene> &posGene, vector<Gene> &negGene, string inputID, const int header);
void getSpecialWindows(vector<Window> &w, vector<Gene> &g, int wSize, int gSize, ofstream &output);

#endif /* defined(__Compare_Data_C____comp_fns__) */
Run Code Online (Sandbox Code Playgroud)

Mar*_*ius 6

重复符号表示链接器在两个编译单元(和)中都面临相同的功能.也许你没有在头文件中实现这些功能?main.cppcomp_fns.cppinline