вот определение класса 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;», возникает ошибка.