-3

我正在尝试在终端中使用 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

任何帮助将不胜感激,如果需要,我可以发布代码。编辑:我没有将一个 cpp 文件#include 到另一个文件中。这是我的头文件,我认为问题可能出在哪里。这是我的第一个 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__) */
4

1 回答 1

6

重复符号意味着链接器在您的两个编译单元(和)中都面临相同的功能。也许您在没有 的情况下实现了标题中的功能?main.cppcomp_fns.cppinline

于 2013-10-24T20:41:57.893 回答