14

学校のプロジェクトに取り組んでいますが、Xcode から奇妙なエラーが発生します。私は TextMate の Command+R 関数を使用してプロジェクトをコンパイルしています。コンパイルは正常に動作しているように見えますが、リンクが失敗し、理解できないエラー メッセージが表示されます。

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

何がうまくいかないのですか?いくつかの理由から、プロジェクトのソース全体を投稿したくありません。

4

3 に答える 3

22

私の最初の考えは、リンカーコマンドに2回含めているということでしたが、同じ機能を持つことについて不平を言っているようですmain.oand generics.o.

io_functions.cppしたがって、ファイルをmain.cppandに含めているように見えますが、generics.cppこれは最善の場合には悪い考えです。

io_functions.hに含まれるすべてを指定するヘッダー ファイル (例: ) が必要でio_functions.cppあり、そのヘッダーファイルを他の 2 つに含める必要があります。

于 2008-11-12T01:26:54.633 に答える
5

io_functions.cpp が 2 回 (generics.cpp で 1 回、main.cpp で 1 回) 含まれているようです。

于 2008-11-12T01:22:59.943 に答える