ld: дублированный символ - PullRequest
9 голосов
/ 12 ноября 2008

Я работаю над школьным проектом и получаю странные ошибки от Xcode. Я использую функцию Command + R TextMate для компиляции проекта. Компиляция, кажется, работает хорошо, но связывание не удается с сообщением об ошибке, которое я не понимаю.

вывод ld:

ld: дубликат символа text_field (std :: basic_istream> &) в /path/final/build/final.build/Release/final.build/Objects-normal/ppc/generics.o и / path / final / build /final.build/Release/final.build/Objects-normal/ppc/main.o collect2: ld вернул 1 статус выхода

Ниже мой файл io_functions.cpp Это единственное объявление text_field во всем проекте.

#include <string>
#include <iostream>
#include <iomanip>

using namespace std;

#ifndef ENDF
#define ENDF '|'
#define ENDR '\n'

/**
reads one field from a given input stream
Usage: var = text_field(in)
*/
string text_field(istream &in){
    string s;
    getline(in, s, ENDF);
    return s; 
}

long long_field(istream &in){
    return atol(text_field(in).c_str()); 
}

int int_field(istream &in){
    return atoi(text_field(in).c_str()); 
}

double double_field(istream &in){
    return atof(text_field(in).c_str()); 
}

#endif

Что не так? По ряду причин я не хочу публиковать весь источник моего проекта.

Ответы [ 2 ]

19 голосов
/ 12 ноября 2008

Сначала я подумал, что вы включаете его дважды в команду компоновщика, но, похоже, вы жалуетесь на наличие одной и той же функции в main.o и generics.o.

Похоже, вы включаете файл io_functions.cpp в main.cpp и generics.cpp, что в лучшем случае является плохой идеей.

У вас должен быть файл заголовка (например, io_functions.h), который определяет все, что содержится в io_functions.cpp, и включает этот файл header в другие два.

5 голосов
/ 12 ноября 2008

Похоже, что io_functions.cpp включается дважды (один раз - generics.cpp, один - main.cpp).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...