类和更新数据

时间:2010-07-06 15:15:48

标签: c++ oop class

警告:这很可能是一个非常愚蠢的问题。

我有一个驻留在自己的头文件中并在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);
}

谢谢

5 个答案:

答案 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);
}

然后从objmain传递给它。您还必须通过任何中间函数来连接obj

另一种方法:使obj成为全局变量。如果obj必须由main构建,则objObject*并从main初始化:

int main() {
    obj = new Object;
}