需要有关模板类的指导和理解行错误

时间:2011-10-03 00:10:10

标签: c++

我正在尝试为文件执行广度优先顺序,但是,当我实现此模板类以使用队列时,我得到了这个错误?,任何想法,这可能是什么?,我也不明白的方式指定错误的行号(即myprogram.c:23:10)不知道它在哪里

program.c:11:10: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
program.c:22:10: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
program.c:33:10: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ token
program.c: In function ‘display_info’:
program.c:49:3: error: ‘q_type’ undeclared (first use in this function)
program.c:49:3: note: each undeclared identifier is reported only once for each function it appears in
program.c:49:10: error: ‘string’ undeclared (first use in this function)
program.c:49:18: error: ‘bfFilesQueue’ undeclared (first use in this function)
program.c:50:18: error: ‘bfDirsQueue’ undeclared (first use in this function)

现在Queue类是从这里开始的,我想用它来表示字符串,基本上是文件路径

http://www.java2s.com/Code/Cpp/Generic/Createagenericqueue.htm

所以我的问题是,因为我不希望你为我调试这个..但想知道以下内容:

  • 我试图在#include之后将队列声明在顶部,以便我可以全局访问它们。它似乎不喜欢它,因为我试图从display_info函数中使用它。我怎样才能声明这一点,以便我可以从任何地方访问这些队列?

  • 我不明白如何检查它告诉错误的哪一行(即:12:10),我从我发布的链接中取出了这个模板类..不知道为什么会抛出错误。如何根据这些奇怪的数字知道行号?

所以代码和错误只是信息性的,所以你可以用足够的信息回答这两个问题..任何帮助将不胜感激。

谢谢

#define _XOPEN_SOURCE 500
#include <ftw.h>
#include <stdio.h>
#define SIZE 100

template <class Qtype> class q_type {
    Qtype queue[SIZE]; 
    int head, tail;    
public:
    q_type() { 
        head = tail = 0; 
    }
    void q(Qtype num); 
    Qtype deq();  
};  

template <class Qtype> void q_type<Qtype>::q(Qtype num)
{
    if(tail+1==head || (tail+1==SIZE && !head)) {
        cout << "Queue is full.\n";
        return;
    }
    tail++;
    if(tail==SIZE) 
        tail = 0; // cycle around
    queue[tail] = num;
}

template <class Qtype> Qtype q_type<Qtype>::deq()
{
    if(head == tail) {
        cout << "Queue is empty.\n";
        return 0;  
    }
    head++;
    if(head==SIZE) 
        head = 0; 
    return queue[head];
}

q_type<string> bfFilesQueue;
q_type<string> bfDirsQueue;


static int display_info(const char *fpath, const struct stat *sb,
        int tflag, struct FTW *ftwbuf)
{

    //Check the type of Flag (i.e File or Directory)
    switch(tflag)
    {
        case FTW_D: 
        case FTW_F: 
            bfFilesQueue.q(fpath);
            break;

        case FTW_DP: 
            bfDirsQueue.q(fpath);
            break;
    }
    return 0; /* Continue */
}

2 个答案:

答案 0 :(得分:3)

  

program.c:11:10:错误:在'&lt;'令牌

之前预期'=',',',';','asm'或'属性'

这听起来像是在编译C ++源代码为C。

然后,一个简单的修复就是将文件重命名为program.cpp

干杯&amp;第h。,

答案 1 :(得分:0)

你宣布

  q_type<string> bfFilesQueue;
  q_type<string> bfDirsQueue;
在您实际声明q_type之前

。尝试将这些行放在课程

之后