在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个类中进行更改...是否有其他方法可以使用作业。
是否有一些方法可以合并其他构造函数。
答案 0 :(得分:3)
no matching function for call to Abc::Abc()
如果要将类对象实例化为:
,则需要提供一个不带参数的构造函数。Abc d;
这是因为如果您提供自己的 任何 构造函数,编译器不会生成默认的无参数构造函数。您提供了自己的复制构造函数,因此编译器强制您提供自己的无参数构造函数。
答案 1 :(得分:0)
在课程Abc
的结束括号后面没有分号。尝试添加分号,它应该解决问题。
答案 2 :(得分:0)
在删除所有不相关的内容并生成short self-contained compilable example之后(请在以后的问题中自行完成),我想出了这个:
#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
来引入这些定义。