警告:这很可能是一个非常愚蠢的问题。
我有一个驻留在自己的头文件中并在main中创建的对象,我想使用在单独文件中声明的函数更新所述对象。如果我不清楚请告诉我,我会尝试更好地解释自己。
//main
#include"Object.h"
int main(){
Object obj;
}
假设上面是主要的,并且创建了obj。
//functions file which is separate from both the main and object.h
void updateObj(int someNum){
//how can I do this??
obj.callingObject(someNum);
}
谢谢
答案 0 :(得分:2)
您在main中声明的对象位于main的范围内。因此“updateObj”无法访问它。以下之一将使这项工作:
// This (IMO) is a wrong way. Unless perhaps obj is a singleton and then you should just make it such.
//main
Object obj;
int main()
{
}
// functions file
extern Object obj;
void updateObj(int someNum)
{
obj.callingObject(somenum)
}
另一种方式是写:
void updateObj(int somnum, Object& obj)
{
}
答案 1 :(得分:0)
简单的答案,因为代码是写的 - 你不能。您需要使对象成为全局:
#include"Object.h"
Object obj;
void updateObj(int someNum){
extern Object obj;
obj.callingObject(someNum);
}
int main(){
updateObj(42);
}
但你真的,真的不想这样做。
答案 2 :(得分:0)
您可以将obj
设为全局:
// Object.h
//...
extern Object g_obj;
和
// functions file
void updateObj(int someNum){
g_obj.callingObject(someNum);
}
但更优选的方法是将对Object
的引用传递给updateObj
:
// functions file
void updateObj(Object& obj, int someNum){
obj.callingObject(someNum);
}
答案 3 :(得分:0)
这是一种糟糕的风格,因为它假设你的头文件的用户知道必须有一个名为obj的魔法对象在他不知情的情况下被改变。
我认为你所尝试的是一种“单身”设计模式。这很常见,所以谷歌应该带来很多好结果。
另一种方法是在Object.h中实例化对象,这样包括它的人和你的头文件都可以看到它。
如果您坚持,可以在头文件中包含main.cpp,请务必小心保护标题。
答案 4 :(得分:0)
obj
仅在main
的范围内可见,因此无法使用。一种修复方法:重写函数,将参数作为对要修改的对象的引用:
void updateObj(Object& obj, int someNum) {
obj.callingObject(someNum);
}
然后从obj
将main
传递给它。您还必须通过任何中间函数来连接obj
。
另一种方法:使obj
成为全局变量。如果obj
必须由main
构建,则obj
为Object*
并从main
初始化:
int main() {
obj = new Object;
}