2013-02-17 172 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 */ 

从我搜索过的,通常与无关的分号,括号等有关。我什么也没发现各种各样的虽然

感谢您的帮助

回答

2

你不能在类类型queue.add(),你需要调用它,你所创建的对象!在你的情况下,那将是fronta.add(10);

另外,用于创建fronta的语法是错误的。使用queue fronta;

+0

ohmygosh。什么是脑袋。对不起,这个打扰._。 – 2013-02-17 16:06:39

+1

这是**不**最令人头疼的解析。它简单而明确地是一个函数声明,就像'int f();'一样。最令人烦恼的解析包括构建一个临时函数参数;请参阅http://en.wikipedia.org/wiki/Most_vexing_parse。 – 2013-02-17 16:30:36

+0

@Pete感谢您的纠正。 – us2012 2013-02-17 16:31:36

2

queue fronta();正在声明一个函数,该函数返回queue类型的对象并且不带参数。这可能不是你想要的。改为使用queue fronta;

其次,你必须调用该函数add()实例queue,而不是类本身(这将是情况下,如果功能是static,但在这种情况下,你会用::,而不是.) 。因此:

queue.add(10); // ERROR! 
fronta.add(10); // OK 
相关问题