【问题标题】:Need help understanding object not declared in scope需要帮助理解未在范围内声明的对象
【发布时间】:2017-03-09 04:33:24
【问题描述】:

我写了一个示例代码来尝试复制我在学校项目中遇到的关于对象范围的错误:

在文件中: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

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

【问题讨论】:

标签: c++ class object scope


【解决方案1】:

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

所以也许你想做的是给testClassOne() 方法添加一个参数,这样你就可以传入pntrObj2 的值。所以pntrObj1-&gt;testClassOne(); 会变成pntrObj1-&gt;testClassOne(pntrObj2);,在你定义testClassOne 的地方你可以添加一个对应的参数。我会让你弄清楚这一点,以免完全为你做功课:)

【讨论】:

    【解决方案2】:

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

    使用

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

    代替

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

    【讨论】:

      猜你喜欢
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 2016-03-04
      • 1970-01-01
      • 2013-09-23
      相关资源
      最近更新 更多