2

私は、さまざまなクラスを使用する必要があるプロジェクトに取り組んでいます。何らかの理由で、コンパイルしようとすると、次のようなエラーが表示されます。
Undefined symbols for architecture x86_64:

User私はもともと、次のような宣言を持つ呼び出し可能なクラスに取り組んでいましたuser.h:

#ifndef USER_H
#define USER_H
...other include statements

class User
{
    public:
    User();
    public and private members and functions
};

#endif

メソッドの定義は、同じディレクトリ内の別のファイルに格納されていましたuser.cpp

コンパイルしようとすると、コンストラクタとデストラクタに未定義のシンボルがあるというエラーが表示されます。これらの両方を.cppファイルに定義しましたが、エラーを解消できませんでした。

User クラスを主に次のように含めます。

#include "user.h"

user.cppファイルのすべてのコードを に貼り付けることでこれを修正できましuser.hたが、コードを変更できない他のクラスで問題が発生しています。

現在、GMLReader というクラスがあり、gmlreader.h静的に呼び出しているメソッドがあります。ただし、メイン用にインポートしているにもかかわらず、呼び出そうとするたびに次のエラー コードが表示されます。

Undefined symbols for architecture x86_64:
  "GMLReader::read(char const*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)", referenced from:
      _main in cchnzOEh.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

私は以下を使用してsn.cpp、メインを収容してコンパイルしています。

g++ -g -Wall -o sn sn.cpp

このようなエラーが発生する理由はありますか?どうすれば修正できますか?

4

1 に答える 1

1

user.cpp もコンパイルしてリンクする必要があります。

g++ -g -Wall -c user.cpp -o user.o
g++ -g -Wall -o sn sn.cpp user.o
于 2013-02-04T02:14:40.383 に答える