{token之前的预期类名 - 非常简单

时间:2015-05-30 16:04:43

标签: c++ inheritance

我已经看到了这个问题的很多答案,知道要寻找什么,但仍然可以看到。看起来像是一个明显的问题。

Algorithm.h:

#ifndef ALGORITHM_H
#define ALGORITHM_H

#include <iostream>
using namespace std;

template <typename T>

class Algorithm
{
private:
    T data;
    T result;
public:
    Algorithm(T in){
        data = in;
    }

    void compute();

    void displayData(){
        cout<<data<<endl;
    }

    T getResult(){
        return result;
    }
};

#endif // ALGORITHM_H

Bubble.h:

#ifndef BUBBLE_H
#define BUBBLE_H

#include "algorithm.h"

class Bubble : public Algorithm{
public:
    Bubble();
};

#endif // BUBBLE_H

的main.cpp

#include "bubble.h"
#include <iostream>
using namespace std;

int main()
{
    Algorithm<int> a(1);
    Algorithm<char> b('a');

    a.displayData();
    b.displayData();


    return 0;
}

错误是:

  

/home/user/Projects/Algorithms/main.cpp:1:包含在的文件中   ../Algorithms/main.cpp:1:0:/home/user/Projects/Algorithms/bubble.h:6:   错误:&#39; {&#39;之前的预期类名token class Bubble:public   算法{                                   ^

为什么编译器看不到Algorithm类?我把它包含在Bubble.h中,所以?

2 个答案:

答案 0 :(得分:2)

您忘记为Algorithm提供模板参数。如果您解决了这个问题,您的代码编译得很好。 (Live

答案 1 :(得分:1)

Bubble继承自Algorithm类,它是一个模板。所以它还需要模板规范:

#ifndef BUBBLE_H
#define BUBBLE_H

#include "algorithm.h"

template <typename T>
class Bubble : public Algorithm<T> {
public:
    Bubble();
};

#endif // BUBBLE_H