2012-04-27 10 views
3

私はC++を初めて使っていますので、エラーメッセージからどの情報を得ることができるかを理解しようとしています。ここで「アーキテクチャの未定義シンボル」エラーについて

エラーメッセージ

 
Undefined symbols for architecture x86_64: 
    "PieceClothing::PieceClothing(int)", referenced from: 
     ClothesInventory::getPieceOfClothing(long) in ClothesInventory.o 
     ClothesInventory::insertIntocloset(std::basic_string, std::allocator >)in ClothesInventory.o 
    "PieceClothing::PieceClothing()", referenced from: 
     ClothesInventory::ClothesInventory()in ClothesInventory.o 
     ClothesInventory::ClothesInventory(std::basic_string, std::allocator >)in ClothesInventory.o 
     std::map, std::allocator > >::operator[](long const&)in ClothesInventory.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

はここで私が理解されている。
- 2個のエラーがあります。
- getPieceOfClothingおよびinsertIntoclosetと関係があるもの。
- コンストラクタ内のその他のものは、おそらくマップやイテレータについてのものです。

メッセージの内容は、メッセージからちょうど得られるすべての情報を理解することが目的だからです。

ありがとうございました。

+0

'for architecture' - あなたは一度に複数のアーキテクチャをリンクする可能性のあるツールチェーンを使って作業していますか? x64とPPCをリンクしているMac?私はそれが赤ちゃんだと思っています。それは 'PieceClothing'コンストラクタの実装を見つけることができないことを伝えているだけです。あなたは間違いなくそれらを実装していますか、それらを確実にリンクしていますか? – Rup

答えて

5

エラーがコンストラクタについて実際にある:

PieceClothing::PieceClothing(int) 
PieceClothing::PieceClothing() 

、彼らは何のシンボルが彼らのために見つかりませんでした言っています。これは通常のいずれかの兆候です:

  • 彼らは、彼らはあなたがその別のモジュールからそれらを参照している実装しているが、実装があるれているファイルが
  • をコンパイルされていない
  • を実施していませんでしたそれらを定義するモジュールとリンクしていません

エラーリストのその他の詳細は、コンストラクタが呼び出された場所を示しています。たとえば、あなたが持っている場合:あなたは、その型のオブジェクトを作成しようとしているため

ClothesInventory::getPieceOfClothing(long) 
{ 
    PieceClothing p; 
} 

あなたはコンストラクタを参照しています。

この作品は2部に分けることができますどのように

1)コンパイラは、クラスを定義するヘッダファイルをチェックし、デフォルトコンストラクタが利用可能であるかどうかを見ています。コンストラクタが見つかるようにコンストラクタを見つけます。

2)リンカーが作用します。これは、オブジェクトファイルと参照されたライブラリの呼び出しに一致するシンボルを探します。これはあなたにとって間違っているところです。

+1

おそらく:*存在するオブジェクトファイルは、x86_64ではないアーキテクチャ用に構築されています。 – Mat

0

メッセージでは、宣言されたコンストラクタPieceClothing::PieceClothing(int)PieceClothing::PieceClothing()の定義が見つからないため、それらを記述しているかどうかをチェックする必要があります。もしそうであれば、それらを含むオブジェクトファイルがリンクの一部。

リンカーの出力が冗長である場合は、どのオブジェクトファイルがリンクされているかを表示する必要があります。

関連する問題