0

C++.hクラスファイルにクラスABCがあります。

.hファイル

#ifndef ABC_H_
#define ABC_H_

class ABC
{
  public:
    int x;
    int y;
};
#endif

.cppファイル

//----- Empty  -----------

メインプログラム.cpp

#include <iostream>
#include "ABC.h"
using namespace std;
    int main() {
      ABC a1;
      a1.x=5; a1.y=2;
      cout<<a1.x;
      // ...
    }

Eclipseでのコンパイル中にエラーが発生しました:

symbols not found for architecture x86_64

ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [CPPProgram] Error 1

他のすべてのhelloworldプログラムなどは、正常にコンパイルおよび実行されます。テンプレートを使用しているときに定義と実装を別々のファイルで行ったときにこのエラーが発生したことを覚えています(同じファイルに定義と実装を実装するとエラーはなくなりました)

ここで何が悪いのかわかりません。助言がありますか?

4

2 に答える 2

4

投稿したコードには、セミコロンがありません。

class ABC
{
public:
int x;
int y;
};
 ^
于 2012-06-07T15:09:33.360 に答える
0

ファイルに正しいヘッダーファイルが含まれていることを確認する必要があり.cppます。インクルードパスに別のABC.hファイルがある可能性があります。また、ファイルがファイルシステム(abc.hvs.などABC.H)で正しく名前が付けられているかどうかを確認することもできます。タイプの名前を一意の名前に変更してヘッダーファイルがインクルードされているかどうかをテストし、コンパイルの動作が変わるかどうかを確認できます。

コンパイラは、通常のソースファイルと競合しないヘッダーファイルインクルードガードの規則を使用することになっていることが私に指摘されました。ヘッダーファイルのいずれにも、二重アンダースコア()を使用する名前が定義されていないこと__、またはアンダースコアで始まり、その後に大文字が続くことを確認してください。

コメントには、コード行でのコンパイルの停止に関する詳細情報をリストし(コンパイルが停止する理由についてはコンパイルエラーを表示しません)、リンクの失敗に関する情報を追加しました。コンパイラは、リンカが失敗する原因となる部分的に作成されたオブジェクトファイルを残すことは想定されていません。おそらく、リンカは古いオブジェクトファイルまたはある種のソースファイル名の競合を見つけています(たとえば、両方test.cとも通常test.ccの名前のオブジェクトファイルを残したいでしょう)。test.oコンパイルシステムに、すべてのオブジェクトファイル(同等のものmake clean)を削除するように指示し、問題が解決するかどうかを確認します。その場合は、ファイル名の競合を確認してください。

于 2012-06-07T15:14:02.623 に答える