-1

以下のエラーが発生します。どこで起こっているのか理解できませんか?それがうまくいかないとき。私はいくつかのコードを次のように開発しています、

abc.h

#include<vector>
vector<string> vect;
vector<string>::iterator ab;

def.c

#include "abc.h"

    vect.push_back("a");
    vect.push_back("b");
    for(ab = vect.begin(); ab != vect.end(); ab++)
    {
    if(*ab == "b")
    {
    FIle *file->fun();
    }

abc.c

#include "abc.h"

    File::file()
    {
    vect.insert(1, "Something");
    }

次のようなエラーが発生します

"class std::_Vector_iterator<class std::_Vector_val<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > > testCase" (?testCase@@3V?$_Vector_iterator@V?$_Vector_val@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@std@@A) already defined in abc.obj
1>GTestThread.obj : error LNK2005: "class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > vect" (?vect@@3V?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@A) already defined in abc.obj
1>D:/ fatal error LNK1169: one or more multiply defined symbols found
4

2 に答える 2

2

これ:

vector<string> vect;
vector<string>::iterator ab;

はヘッダー内の定義です。つまり、ヘッダーを複数の翻訳単位に含めると、1 つの定義ルールが破られます。次のように変更します。

//abc.h
extern vector<string> vect;
extern vector<string>::iterator ab;

それを宣言にして、定義を単一の実装ファイルに移動するには、次のようにします。

//abc.c
#include "abc.h"
vector<string> vect;
vector<string>::iterator ab;

どのようにコンパイルするのか、まだ疑問に思ってdef.cいます。コンテキスト外の実装ファイルにステートメントを貼り付けることはできません。

また、C++ には拡張機能.ccor .cpp(他にもあると思います) がありますが、 ではありません.c

于 2012-09-26T12:21:47.237 に答える
1

それを含むすべてのC++ファイルは独自のコピーを取得するため、ヘッダーファイルのようなものは通常定義しません。したがって、シンボルの重複警告が発生します。vect

ヘッダーで次のように宣言します。

extern vector <string> vect;

次に、C++ ファイルの1 つで定義します。

于 2012-09-26T12:24:12.733 に答える