0

try&catchでエラーを処理するためのErrorクラスは次のとおりです。

#include <stdexcept>
#include <string>

  class Error : public std::exception
    {
    public:
      Error(const std::string&) throw();
      ~Error() throw();
      const char*   what() const throw();
    private:
      std::string           _msg;
    };

そしてcppファイル:

#include "Error.hpp"

Error::Error(const std::string& msg) throw()
  : _msg(msg)
{
}

Error::~Error() throw()
{
}

const char*     Error::what() const throw()
{
  return (_msg.c_str());
}

そして、コンパイル中にこのエラーが発生します:

main.o:(.gcc_except_table+0x34): undefined reference to `typeinfo for Error'
MailBox.o: In function `MailBox::MailBox(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
MailBox.cpp:(.text+0x245): undefined reference to `Error::Error(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
MailBox.cpp:(.text+0x268): undefined reference to `Error::~Error()'
MailBox.cpp:(.text+0x270): undefined reference to `typeinfo for Error'
MailBox.cpp:(.text+0x2f0): undefined reference to `Error::Error(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
MailBox.cpp:(.text+0x313): undefined reference to `Error::~Error()'
MailBox.cpp:(.text+0x31b): undefined reference to `typeinfo for Error'
MailBox.cpp:(.text+0x3d6): undefined reference to `Error::Error(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
MailBox.cpp:(.text+0x3f9): undefined reference to `Error::~Error()'
MailBox.cpp:(.text+0x401): undefined reference to `typeinfo for Error'
MailBox.cpp:(.text+0x452): undefined reference to `Error::Error(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
MailBox.cpp:(.text+0x475): undefined reference to `Error::~Error()'
MailBox.cpp:(.text+0x47d): undefined reference to `typeinfo for Error'
MailBox.cpp:(.text+0x50a): undefined reference to `Error::Error(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
MailBox.cpp:(.text+0x52d): undefined reference to `Error::~Error()'
MailBox.cpp:(.text+0x535): undefined reference to `typeinfo for Error'
MailBox.cpp:(.text+0x6af): undefined reference to `Error::Error(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
MailBox.cpp:(.text+0x6d2): undefined reference to `Error::~Error()'
MailBox.cpp:(.text+0x6da): undefined reference to `typeinfo for Error'
MailBox.cpp:(.text+0x854): undefined reference to `Error::Error(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
MailBox.cpp:(.text+0x877): undefined reference to `Error::~Error()'
MailBox.cpp:(.text+0x87f): undefined reference to `typeinfo for Error'
MailBox.cpp:(.text+0x923): undefined reference to `Error::Error(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
MailBox.cpp:(.text+0x946): undefined reference to `Error::~Error()'
MailBox.cpp:(.text+0x94e): undefined reference to `typeinfo for Error'
MailBox.cpp:(.text+0x9b6): undefined reference to `Error::Error(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
MailBox.cpp:(.text+0x9d9): undefined reference to `Error::~Error()'
MailBox.cpp:(.text+0x9e1): undefined reference to `typeinfo for Error'
collect2: ld returned 1 exit status

私はすでにこのErrorクラスを別のプロジェクトで使用しており、うまく機能しました。なぜここで機能しないのかわかりません。

4

1 に答える 1

3

これはコンパイルエラーではなくリンカエラーです。基本的に、このエラーは、一部の関数の定義が欠落していることを通知しています。

リンカの出力から読み取ると、これらの関数がクラスのコピーコンストラクタとデストラクタであることがわかりErrorます。

これは、(のクラス定義で)これらの関数の宣言のみを表示しているという事実と互換性がありますErrorそれらの定義も提供する必要があります。たとえば、これらの定義を単純にインライン化できます。

class Error : public std::exception
{
public:
    Error(const std::string& s) throw() : _msg(s) { }
    ~Error() throw() { };
    const char*   what() const throw() { return _msg.c_str(); };
private:
    std::string _msg;
};
于 2013-03-10T00:06:23.523 に答える