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

时间:2013-10-24 20:38:23

标签: 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

非常感谢任何帮助,如果需要,我可以发布代码。 编辑:我没有#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__) */

1 个答案:

答案 0 :(得分:6)

重复符号表示链接器面向两个编译单元(main.cppcomp_fns.cpp)中的相同函数。也许您在没有inline

的标题中实现了这些功能