【问题标题】:Single Inheritance C++ and header files单继承 C++ 和头文件
【发布时间】:2014-03-19 04:49:16
【问题描述】:

我收到了

expected class-name before '{' token

在下面的代码中

saltwaterfish.h 头文件:

#ifndef SALTWATERFISH_H
#define SALTWATERFISH_H


class saltwaterfish: public fish
{
public:
    saltwaterfish();
    float GetUnitPrice();
    float GetWeight();
};

#endif // SALTWATERFISH_H

这是定义头文件的正确方法吗

“咸水鱼是鱼的子类”?

我在 saltwaterfish.cpp 中唯一拥有的是

#include "fish.h"
#include "saltwaterfish.h"

fish.cpp 类:

#include "fish.h"
#include <iostream>

#include "freshwaterfish.h"
#include "saltwaterfish.h"

using namespace std;

fish::fish()
{
};

float fish::CalculatePrice()
{
    return GetUnitPrice()*GetWeight();
}

float fish::GetUnitPrice()
{
    return 1.0;
}

float fish::GetWeight()
{
    return 1.0;
}

【问题讨论】:

  • 你能在这里贴出fish类的代码吗?可能你在fish类的末尾缺少};
  • 您是否收到saltwaterfish.cpp 的此错误?
  • 去掉fish构造函数主体后的分号。
  • 你的头文件不是独立的。那时你的头文件没有定义fish。

标签: c++ inheritance


【解决方案1】:

在 saltwaterfish.h 中包含 fish.h 头文件

//saltwaterfish.h
#include"fish.h"
#ifndef SALTWATERFISH_H
#define SALTWATERFISH_H


class saltwaterfish: public fish
{
public:
    saltwaterfish();
    float GetUnitPrice();
    float GetWeight();
};
#endif // SALTWATERFISH_H

编译器没有看到 Fish 是一个类,因此出现了错误。

【讨论】:

    【解决方案2】:

    你应该放

    #include "fish.h"
    

    在头文件本身中。 (saltwaterfish.h)

    否则这段代码将无法访问fish类。

    祝你好运。

    【讨论】:

    • 虽然没有解释问题(除非它在不同的源文件中,问题中没有提到)。
    • 代码顶部的 #ifndef SALTWATERFISH_H 表明此代码在 saltwaterfish.h 中
    • @TanmayPatil 放置 "fish.h"&lt;fish.h&gt; 有区别吗?
    • 是的。 表示编译器将在所有包含目录中进行搜索。另一方面,“fish.h”也会使编译器在源中搜索。
    • 虽然这取决于编译器实现,但更多信息请访问stackoverflow.com/questions/21593/…
    【解决方案3】:

    错误的意思是“{ 之前的东西应该是一个类名,但它不是。”所以“鱼”不是一个类名。查找 fish 类的声明,并确保它在此声明之前加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      相关资源
      最近更新 更多