我在声明嵌套类时遇到问题。我的问题是如何正确声明嵌套类并调用其成员。我尝试使用谷歌搜索并尝试了不同的方法,但我似乎无法使其发挥作用。现在我得到"错误:预期不合格的id' {'令牌"在线LongInt :: Digit {
这就是我正在尝试的:
标题文件
class LongInt {
public:
class Digit{
public:
int data;
Digit(int d);
};
// Constructor
LongInt();
};
Cpp档案
#include <iostream>
#include "LongInt.h"
using namespace std;
LongInt::Digit{
Digit next;
Digit prev;
LongInt::Digit::Digit (int d) {
data = d;
next = NULL;
prev = NULL;
}
}
LongInt::Digit front;
LongInt::Digit back;
LongInt::Digit curr;
LongInt::LongInt() {
front = NULL;
back = NULL;
curr = NULL;
}
答案 0 :(得分:1)
此
LongInt::Digit{
Digit next;
Digit prev;
LongInt::Digit::Digit (int d) {
data = d;
next = NULL;
prev = NULL;
}
};
您似乎正在执行Digit
课程的&#39;部分重新声明&#39; ,这是不可能的。
您应该在标题
中完全声明您的嵌套类class LongInt {
public:
class Digit{
public:
int data;
Digit(int d);
Digit* next;
Digit* prev;
};
// Constructor
LongInt();
};
你的构造函数就像
一样LongInt::Digit::Digit (int d) : data(d), next(NULL), prev(NULL) {
}
答案 1 :(得分:1)
内部类的成员应该在内部类中声明。
此外,我认为有几个地方你有指针,但你有对象(你通常想要指定NULL
。)
此外,您只声明了一个Digit
构造函数,它接受int
,没有构造函数不带参数,因此您不能在没有参数的情况下声明Digit
。
最后,你真的不应该在LongInt::LongInt()
内进行三项任务,因为这些变量不是指针。
以下是.h
文件:
class LongInt {
public:
class Digit{
public:
Digit* next;
Digit* prev;
int data;
Digit(int d);
};
// Constructor
LongInt();
};
以下是.cc
文件:
#include <iostream>
#include "LongInt.h"
using namespace std;
LongInt::Digit::Digit (int d) {
data = d;
next = NULL;
prev = NULL;
}
LongInt::Digit front(1);
LongInt::Digit back(1);
LongInt::Digit curr(1);
LongInt::LongInt() {
// front = NULL;
// back = NULL;
// curr = NULL;
}