Как сделать занятия в NACHOS (C ++) - PullRequest
0 голосов
/ 26 сентября 2011

Я пытаюсь реализовать класс проигрывателя, поэтому я создал два файла в своей папке потоков, player.cc и player.h

player.h выглядит так:

#ifndef PLAYER_H
#define PLAYER_H
#include "utility.h"

class Player()
{
  public:
   //getPlayerID();
};

#endif

, то player.cc идет как

#include "player.h"

class Player()
{
  string playerID;
  int timeCycle;
}

Затем в мои main.cc и threadtest.cc я добавляю в #include player.h, а затем начинаю к ошибкам, и он не компилируется. Я новичок в nachos и немного незнаком с c ++, поэтому я не понимаю, как решить эту проблему. Nachos также не предоставляет решения через компилятор.

Когда я набираю gmake, он говорит две ошибки. 1. проанализировать ошибку перед '(' в player.h (имеется в виду Player ()) 2. * [main.o] Ошибка 1

Ответы [ 2 ]

2 голосов
/ 26 сентября 2011

Давайте рассмотрим строку за строкой:

#ifndef PLAYER_H
#define PLAYER_H
#include "utility.h"

Пока все хорошо, вы можете проверить, поддерживает ли ваш компилятор #pragma once, но макрос будет работать отлично.

class Player()

() не допускаются в имени класса, снимите их

{
  public:
   //getPlayerID();
};

#endif

Остальная часть заголовочного файла в порядке.Давайте посмотрим на файл реализации:

#include "player.h"

Отлично.Помещение класса в заголовок - лучший способ убедиться, что в вашей программе используется только одно определение.

class Player()

Скобки недопустимы, но здесь у вас есть большая проблема.У вас уже есть класс с этим именем.Позвольте заголовку предоставить определение класса, файлу реализации просто нужно предоставить не встроенные функции-члены (и любой вспомогательный код).

{
  string playerID;
  int timeCycle;
}

Вот полная исправленная версия:

#if !defined(PLAYER_H)
#define PLAYER_H

#include <string>
#include "utility.h"

class Player
{
     std::string player_id;
     int time_cycle;

public:
     // this is how you make a constructor, the parenthesis belong here, not on the class name
     Player(std::string id, int time);

     std::string getPlayerId() const;
};

#endif /* !defined(PLAYER_H) */

и файл реализации

#include "player.h"

// and this is how you write a non-inline constructor
Player::Player(std::string id, int time)
    : player_id(id)
    , time_cycle(time)
{}

std::string Player::getPlayerId() const
{
    return player_id;
}

Все эти проблемы на самом деле являются базовыми для C ++, не имеют ничего общего с NachOS.

1 голос
/ 03 декабря 2012

Вы модифицировали Makefile.common в корневом каталоге nachos?Я думаю, вы должны добавить какое-то значение к THREAD_H, THREAD_O и THREAD_C.

...