嵌套类的麻烦。 "错误:在' {'之前预期的不合格ID令牌"

时间:2014-04-07 06:57:51

标签: c++ class nested-class

我在声明嵌套类时遇到问题。我的问题是如何正确声明嵌套类并调用其成员。我尝试使用谷歌搜索并尝试了不同的方法,但我似乎无法使其发挥作用。现在我得到"错误:预期不合格的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;
}

2 个答案:

答案 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;
}