不访问全局对象的类

时间:2013-01-17 09:17:56

标签: c++ oop inheritance

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

  

“c1未在此范围内声明”

来自编译器的

错误。我是使用Code :: Blocks的usig Mingw。我会假设全局变量是程序的全局变量?我错了吗? TYIA -Roland

    // 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";
}

3 个答案:

答案 0 :(得分: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";
}

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您的main .h需要包含2个类的.h个文件才能生效。您不需要(也不应该)包含.cpp个文件。