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 回答