ожидаемый инициализатор перед токеном '*' в экспериментах с начос - PullRequest
0 голосов
/ 26 мая 2020

вот определение класса Alarm: (я внес некоторые изменения в вопрос)

//Alarm.h
#pragma once
#include "system.h"
#include "list.h"
//#include "../machine/timer.h"
//void timerhandler(int dummy);

void check(int which);

class Alarm
{
public:         
    Alarm();
    ~Alarm();
    void Pause(int howLong);
    List *queue;
    //Timer *timer;
    int waiters;
    void CheckIfDue();          // Check if an interrupt is supposed
                                // to occur now
    static void new_instance();
    static Alarm *instance;
};

объявление alm находится в файле с именем system. cc.

//system.cc
#include "copyright.h"
#include "system.h"

...

Alarm *alm;

ошибка возникает в system.h, в котором я объявил Alarm.h.

//system.h
#include "copyright.h"
#include "utility.h"
#include "thread.h"
#include "scheduler.h"
#include "interrupt.h"
#include "stats.h"
#include "timer.h"
#include "Alarm.h"

// Initialization and cleanup routines
extern void Initialize(int argc, char **argv);  // Initialization,
                        // called before anything else
extern void Cleanup();              // Cleanup, called when
                        // Nachos is done.


extern Thread *currentThread;           // the thread holding the CPU
extern Thread *threadToBeDestroyed;         // the thread that just finished
extern Scheduler *scheduler;            // the ready list
extern Interrupt *interrupt;            // interrupt status
extern Statistics *stats;           // performance metrics
extern Timer *timer;                // the hardware alarm clock
extern Alarm *alm;
33 extern Alarm *alm;
../threads/system.h:33: error:expected initializer before ‘*’ token

кажется, где бы я ни поместил код «extern Alarm * alarm;», возникает ошибка.

1 Ответ

0 голосов
/ 26 мая 2020

Я нашел причину. похоже, это вызвано заголовочными файлами, содержащими друг друга (system.h и Alarm.h). Ошибка исчезает, когда я помещаю «extern Alarm * alarm» в Alarm. cc. Но я до сих пор не узнал подробностей об ошибке. Буду признателен, если вы дадите мне несколько идей.

...