0

这真的让我很困惑。出于某种原因,我得到了一个

“c1 未在此范围内声明”

来自编译器的错误。我正在使用带有 Code::Blocks 的 Mingw。我会假设全局变量对程序来说是全局的?我错了吗?TYIA-罗兰

    // main.h
    #include <iostream>

    #include "classone.cpp"
    #include "classtwo.cpp"

    extern AnotherClass c2;
    extern TheClass c1;


----------

    // main.cpp
    #include "main.h"

    AnotherClass c2;
    TheClass c1;

    int main()
    {

        c1.function5();
        c2.function2();

        return 0;
    }


----------

    //classone.h

    #include "main.h"
    class AnotherClass  {
    `
          public:
        void function2();

    void function3();

      private:
    int varone;
    int vartwo;
};


----------

// classone.cpp

#include "classone.h"

void AnotherClass::function2()  {

    std::cout << "Function 2 Check\n";
}

void AnotherClass::function3()  {

    std::cout << "Function 3 Check";
}


----------

// classtwo.h

#include "main.h"
class TheClass  {

      public:
    void function4();
    void function5();
};


----------

// classtwo.cpp
#include "classtwo.h"

void TheClass::function4()  {

    c1.function2();
    std::cout << "Function 2 Check\n";
}

void TheClass::function5()  {

    std::cout << "Function 3 Check";
}
4

3 回答 3

4

包含这样的 .cpp 文件非常愚蠢 - 仅包含标题。

无论如何,将 main.h 更改为:

#include <iostream>
extern AnotherClass c2;
extern TheClass c1;

将此添加到 main.cpp:

AnotherClass c2;
TheClass c1;

然后包含main.h在每个需要它的文件中,如下所示:

// classtwo.cpp
#include "classtwo.h"
#include "main.h"

void TheClass::function4()  {

    c1.function2();
    std::cout << "Function 2 Check\n";
}

void TheClass::function5()  {

    std::cout << "Function 3 Check";
}

此外,如果您还没有警卫,则需要包括警卫。

于 2013-01-17T09:22:02.173 回答
0

如果要将所有代码编译到单个文件中,则需要在 .cpp 文件中包含类声明。在 classtwo.cpp 中插入 #include "classtwo.h" 并对两个文件顶部的 classone 执行相同操作。

标准做法是将类代码与客户端代码分开,因此您应该将类​​编译到库中并将其链接到主程序。

于 2013-01-17T09:21:53.987 回答
0

main .h需要包含.h2 个类的文件才能使其正常工作。您不需要(也不应该)包含这些.cpp文件。

于 2013-01-17T09:23:18.167 回答