2017-03-09 139 views
0

我写下一个示例代码,试图复制我得到一个学校项目有关对象的范围误差不申报对象:需要帮助理解的范围

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

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

+1

猜测自己的方式为C++就是要关掉它一个非常简单的方法。你应该从一本好书开始:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –

回答

1

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

所以,也许你想要做的是添加一个参数到testClassOne()方法,所以你可以传入值pntrObj2。因此pntrObj1->testClassOne();将变为pntrObj1->testClassOne(pntrObj2);,并且您在其中定义testClassOne可以添加相应的参数。我会让你摸不着头脑,以不完全做你的功课你:)

0

在这里,你有你的文件了大量的时间和testClassOne功能,不声明pntrObj2

使用

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

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