2013-02-17 3 views
0

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

#include <cstdlib> 
#include <iostream> 
#include "queue.h" 

using namespace std; 

int main(int argc, char** argv) { 

    queue fronta(); 

    queue.add(10); // <- expected unqualified-id before ‘.’ token 
} 

queue.h:

#ifndef QUEUE_H 
#define QUEUE_H 

#include "queueItem.h" 

class queue { 
private: 
    queueItem* first; 
    queueItem* last; 

public: 
    queue(); 
    void add(int number); 
    int get(void); 
    bool isEmpty(); 
}; 

#endif /* QUEUE_H */ 

queueItem.h:

#ifndef QUEUEITEM_H 
#define QUEUEITEM_H 

class queueItem{ 
private: 
    int value; 
    queueItem* next; 

public: 
    queueItem(int value); 

    int getValue(); 
    queueItem* getNext(); 
    void setNext(queueItem* next); 
}; 

#endif /* QUEUEITEM_H */ 

С что я googled, это обычно связано с посторонней точкой с запятой, скобкой или таковой. Я ничего не нашел своего рода, хотя

Спасибо за помощь

ответ

2

Вы не можете позвонить .add() по типу класса queue, вам нужно вызвать его на объект, который вы создали! В вашем случае это будет fronta.add(10);.

Кроме того, ваш синтаксис для создания fronta неверен. Используйте queue fronta;.

+0

ohmygosh. какой мозговой шок. Извините за беспокойство. –

+1

Это ** не ** самый неприятный синтаксический разбор. Это просто и недвусмысленно объявление функции, как 'int f();'. Самый неприятный анализ включает в себя создание временного аргумента функции; см. http://en.wikipedia.org/wiki/Most_vexing_parse. –

+0

@Pete Спасибо за исправление. – us2012

2

Линия queue fronta(); объявляет функцию, которая возвращает объект типа queue и не принимает никаких аргументов. Скорее всего, это не то, что вы хотите. Вместо этого используйте queue fronta;.

Во-вторых, вы должны вызвать функцию add() на например из queue, а не на сам класс (что было бы в случае, если функция была static, но в этом случае вы должны использовать :: вместо .) , Поэтому:

queue.add(10); // ERROR! 
fronta.add(10); // OK 
Смежные вопросы