0

Abc.hpp ファイルでは、次の情報が定義されています。

class Abc: public A
{
 enum Ac { VAR };

   struct L{
      std::string s1;
      ::Class2::ID type;
      unsigned s;
      bool operator==(const L& l) const { return (type==l.type)&&(s==l.s)&&(s==l.s); }
   };

   class SS
   {
      public:
      virtual ~SS();
   };
   class IS {
      public:
      /// Destructor
      virtual ~IS();

   };

   class HashIndexImplementation;
   class HashIndex;

 void func(){}

  Abc& operator=(Abc&) {
    cout << "A::operator=(A&)" << endl;
    return *this;
  } //It gives me the error that the token '{' is not recognized

 Abc(Class2 & part);
};

上記のクラスでは、私の目的のために次の情報を別のクラスに割り当てることを目指しています。

Abc d;
static Abc f;
f=d;

ただし、上記のコードは機能しません...スローされるエラーは次のとおりです。

 no matching function for call to Abc::Abc()

編集:クラスの階層全体を扱っているため、Abc() のような別のコンストラクターを追加すると、さらに 20 個ものクラスを変更する必要があります...割り当てに使用できる他の方法はありません。他のコンストラクターを組み込む手段はありますか。

4

3 に答える 3

3
no matching function for call to Abc::Abc()

クラスオブジェクトを次のようにインスタンス化する場合は、引数を取らないコンストラクターを提供する必要があります。

Abc d;

これは、独自のコンストラクターを指定した場合、コンパイラーはデフォルトの引数なしコンストラクターを生成しないためです。独自のコピーコンストラクターを提供したため、コンパイラーは独自の引数なしコンストラクターを提供するように強制します。

于 2012-06-08T14:14:45.827 に答える
0

class の右中括弧の後にセミコロンがありませんAbc。セミコロンを追加してみてください。問題が解決するはずです。

于 2012-06-08T14:01:17.697 に答える
0

無関係なものをすべて取り除き、短い自己完結型のコンパイル可能な例を作成した後(今後の質問でこれを自分で行ってください)、私はこれを思いつきました:

#include <iostream>
#include <iomanip>
#include <map>
#include <string>
using namespace std;
class Abc
{
 enum Ac { VAR };

  Abc& operator=(Abc&) {
    cout << "A::operator=(A&)" << endl;
    return *this;
  } //It gives me the error that the token '{' is not recognized

};

int main()
{
    Abc abc;
}

これはコンパイルされますが、実際にはあまり機能しません。Abcインバウンド参照では何もしません。言語構文に関する限り、技術的には正しいですが、有用な作業はありません。通常、次の行に沿って何かを行います。

class Abc
{
  int foo_;
  Abc& operator=(Abc& rhs) {
    cout << "A::operator=(A&)" << endl;

  foo_ = rhs.foo_;

    return *this;
  } //It gives me the error that the token '{' is not recognized
};

それを超えて、あなたが持っていた構文エラーはなくなりました。のAbc基底クラスB::class2. #includeおそらく、これらの定義を取り込むために何かが必要になるでしょう。

于 2012-06-08T14:08:21.387 に答える