我写下了一个示例代码,试图复制我在学校项目中获得的关于对象范围的错误:
在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
如果我不得不猜测,我需要以某种方式传递参考,但我不知道从哪里开始。任何帮助表示赞赏。
答案 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();
}