需要帮助理解未在范围内声明的对象

时间:2017-03-09 04:33:24

标签: c++ class object scope

我写下了一个示例代码,试图复制我在学校项目中获得的关于对象范围的错误:

在file:classTest.cpp

#include "headerone.h"
#include "headertwo.h"

#include <iostream>

using namespace std;

int main() {

    ClassOne* pntrObj1 = new ClassOne;

    ClassTwo* pntrObj2 = new ClassTwo;

    pntrObj1->testClassOne();

    return 0;
}

在文件中:headerone.h

#ifndef HEADERONE_H
#define HEADERONE_H

#include "headertwo.h"

#include <iostream>

using namespace std;

class ClassOne {
    public:
        void testClassOne() {
            cout << "One Worked\n";
            pntrObj2->testClassTwo();
        }
};

#endif

在档案中:headertwo.h

#ifndef HEADERTWO_H
#define HEADERTWO_H

#include <iostream>

using namespace std;

class ClassTwo {
    public:
        void testClassTwo() {
            cout << "Two Worked";
        }
};

#endif

要清楚,错误是:pntrObj2未在此范围内声明。错误来自文件headerone.h

如果我不得不猜测,我需要以某种方式传递参考,但我不知道从哪里开始。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

变量pntrObj2仅在声明范围内可见,在本例中为您的函数main()。换句话说,只有main()大括号内的代码才能使用名称pntrObj2来引用该变量。但是,您可以将该值作为函数调用的参数传递给其他代码段。

所以也许你想要做的是为testClassOne()方法添加一个参数,这样你就可以传入pntrObj2的值。因此pntrObj1->testClassOne();将成为pntrObj1->testClassOne(pntrObj2);,您定义testClassOne的位置可以添加相应的参数。我会让你弄清楚这一点,以便不完全为你完成你的作业:)

答案 1 :(得分:0)

这里你包含了很多时间的文件,在testClassOne函数中,你没有声明pntrObj2

使用

 void testClassOne() {
            cout << "One Worked\n";
            ClassTwo* pntrObj2 = new ClassTwo()
            pntrObj2->testClassTwo();
        }

保证

 void testClassOne() {
            cout << "One Worked\n";
            pntrObj2->testClassTwo();
        }