【问题标题】:Another expected class name before '{' token c++ inheritance issue'{' token c++ 继承问题之前的另一个预期类名
【发布时间】:2018-03-16 13:30:36
【问题描述】:

似乎无法找到错误所在。我认为不存在循环实施问题。我很确定所有 .h 文件都包含在它们需要的位置。 Array 继承自 BaseArray:

错误:

In file included from driver.cpp:6:0:
Array.h:10:1: error: expected class-name before ‘{’ token
 {

BaseArray.h:

#ifndef _BASEARRAY_H_
#define _BASEARRAY_H_

#include <cstring>

template <typename T>
class BaseArray
{
    public...
}
#include "BaseArray.inl"
#include "BaseArray.cpp"

#endif   // !defined _BASEARRAY_H_

BaseArray.cpp:

#include "BaseArray.h"
#include <stdexcept> 
#include <iostream>

//..Constructors, Destructors, Functions...

数组.h:

#ifndef _ARRAY_H_
#define _ARRAY_H_

#include "BaseArray.h"
#include <cstring>


template <typename T>
class Array: public BaseArray
{
public:
    ......
};
#include "Array.inl"
#include "Array.cpp"

#endif   // !defined _ARRAY_H_

数组.cpp

#include "Array.h"
#include "BaseArray.h"
#include <stdexcept>
#include <iostream>
//
// Array
//


template <typename T>
Array <T>::Array (void): BaseArray<T>()

//...more and more code

【问题讨论】:

  • BaseArray 是一个模板,所以需要一个类型,大概是class Array: public BaseArray&lt;T&gt;
  • 太棒了!那行得通。我对继承和模板真的很陌生,所以很多事情都在我的脑海中。
  • BaseArray.h 包含 BaseArray.cpp,BaseArray.cpp 包含 BaseArray.h。 Array.cpp 也有同样的问题。建议对包含的文件使用不同的扩展名,而不是形成自己的翻译单元

标签: c++ class oop templates inheritance


【解决方案1】:

改变这个:

class Array: public BaseArray

到这里:

class Array: public BaseArray<T>

因为BaseArray 是一个模板类。

此外,在您的头文件中,您不要在类的末尾放置分号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    相关资源
    最近更新 更多