嵌套类的问题。 "error: expected unqualified-id before '{' token"

Trouble with nested classes. "error: expected unqualified-id before '{' token"

本文关键字:before token unqualified-id 问题 嵌套 error expected      更新时间:2023-10-16

我在声明嵌套类时遇到问题。我的问题是如何正确声明嵌套类并调用其成员。我尝试过谷歌搜索它并尝试了不同的方法,但我似乎无法让它工作。现在我在 LongInt::D igit{ 行上收到"错误:在'{'令牌之前预期的非限定 id"

这就是我正在尝试的:

头文件

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

LongInt::Digit{
    Digit next;
    Digit prev;
    LongInt::Digit::Digit (int d) { 
        data = d;
        next = NULL;
        prev = NULL;
    }
};

看起来您正在对Digit类进行"部分重新声明",这是不可能的。

您应该在标头中完全声明嵌套类

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) {
}

内部类的成员应在内部类中声明。另外,我认为有几个地方你想有指针,但你有对象(你通常想NULL分配给指针)。

此外,您只声明了一个接受intDigit构造函数,而没有声明不接受参数的构造函数,因此您不能在没有参数的情况下声明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;
}
相关文章: