【问题标题】:Compiling a class with separate source and header用单独的源代码和头文件编译一个类
【发布时间】:2013-05-03 16:12:19
【问题描述】:

编辑:问题的解决方案如下:http://www.jusuchyne.com/codingchyne/2011/03/codeblocks-failed-to-find-the-header-file/

它不会编译,我有以下错误:

  • foo.h 目录中没有这样的文件;
  • foo 尚未声明;
  • num 未在此范围内声明
  • foo 不是类或命名空间

至少可以这么说,这很奇怪,因为我只是使用了“创建新类”的代码块,然后将其添加到了这个项目中。这是源代码:

标题:

#ifndef FOO_H
#define FOO_H
class foo
{
    private:
    int num;
    public:
        foo();
    void set_num(int set);
    int get_num();
};
#endif // FOO_H

cpp

#include "foo.h"

foo::foo()
{
    num = 10;
}

void foo :: set_num(int set)
{
    num = set;
}

int foo :: get_num()
{
    return num;
}

忽略 calss 本身和它的作用,问题是即使我使用了默认的代码块类创建设置,它也无法编译。

错误:

C:\Users\SameTime\Desktop\CodeBLocks\ASDD\src\foo.cpp|1|error: foo.h: No such file or directory|
C:\Users\SameTime\Desktop\CodeBLocks\ASDD\src\foo.cpp|3|error: 'foo' has not been declared|
C:\Users\SameTime\Desktop\CodeBLocks\ASDD\src\foo.cpp|3|error: ISO C++ forbids declaration of 'foo' with no type|
C:\Users\SameTime\Desktop\CodeBLocks\ASDD\src\foo.cpp||In function 'int foo()':|
C:\Users\SameTime\Desktop\CodeBLocks\ASDD\src\foo.cpp|5|error: 'num' was not declared in this scope|
C:\Users\SameTime\Desktop\CodeBLocks\ASDD\src\foo.cpp|6|warning: no return statement in function returning non-void|
C:\Users\SameTime\Desktop\CodeBLocks\ASDD\src\foo.cpp|8|error: 'foo' is not a class or namespace|
C:\Users\SameTime\Desktop\CodeBLocks\ASDD\src\foo.cpp||In function 'void set_num(int)':|
C:\Users\SameTime\Desktop\CodeBLocks\ASDD\src\foo.cpp|10|error: 'num' was not declared in this scope|
C:\Users\SameTime\Desktop\CodeBLocks\ASDD\src\foo.cpp|13|error: 'foo' is not a class or namespace|
C:\Users\SameTime\Desktop\CodeBLocks\ASDD\src\foo.cpp||In function 'int get_num()':|
C:\Users\SameTime\Desktop\CodeBLocks\ASDD\src\foo.cpp|15|error: 'num' was not declared in this scope|
||=== Build finished: 8 errors, 1 warnings ===|

【问题讨论】:

  • 头文件叫foo.h和在同一个目录吗?
  • 是的。 IDE 处理该部分。
  • 请发布您遇到的错误。
  • 您是否在具有区分大小写文件的系统上进行编译?也许是 Foo.h 或 FOO.h?
  • 你试过#include "./foo.h" 吗?

标签: c++ codeblocks


【解决方案1】:

如果标头不在同一目录中,您必须在 include 命令中指定路径,或者必须将 -I Path 指令添加到您的 makefile 或包含设置。

也许这个链接也有帮助,因为代码块似乎有问题。

http://www.jusuchyne.com/codingchyne/2011/03/codeblocks-failed-to-find-the-header-file/

【讨论】:

  • 就是这样,在同一个目录下。
  • 这个是解决方法,谢谢你的链接,我会加到主线程中的。
  • 不过还是觉得很奇怪。 :) 可能是代码块不是从源代码所在的目录调用编译器,这是我目前能想到的唯一解释。
【解决方案2】:

这应该是一个评论,但我还没有 50 个代表...

您能否在命令行中导航到源目录并尝试手动编译以确保错误不在 IDE 上?

如果您的 IDE 使用 g++(可能是),那么命令将是 g++ foo.cpp

【讨论】:

  • 我并不真正使用命令行。虽然我换了IDE,课程开始工作了……这个问题越来越有趣了,问题不应该出在IDE,因为CodeBlocks被广泛使用。
  • 这也是我不喜欢将 IDE 用于像 C++ 这样的语言的部分原因,我觉得它们增加了不必要的复杂性。我建议学习一点命令行(导航到目录并编译并不需要太多)和 makefile(这将允许您使用非常短的命令来编译甚至是大型项目)。
【解决方案3】:
  1. 打开 Windows 资源管理器
  2. 导航到包含文件的文件夹
  3. 确保标题名为“foo.h”(您知道 Explorer 有时会隐藏文件扩展名,对吗?)

如果不这样做,你的编译器坏了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-24
    • 2013-05-21
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多