我试图定义一个struct变量,并通过类作为下面的示例使用 . 我只想分配一次struct变量,而不是在每个函数中获取/设置 .
global.h
struct structPort{
unsigned int portno;
unsigned int timeleft;
int dummy;
};
extern structPort mainPort; // this one is wanted to be used through classes
class1.h
#include "global.h"
class class1{
structPort classPort; // just wanted to deal with this inside class
public:
init(structPort &_prt);
changeDummy();
}
class1.cpp
void class1::init(port &_prt){
classPort = _prt;
}
void class1::changeDummy(){
classPort.dummy = 20;
cout << classPort.dummy << endl;
}
main.cpp
#include "global.h"
#include "class1.h"
structPort mainPort;
class1 mainClass;
main(){
mainPort.portno = 1;
mainPort.dummy = 10;
cout << mainPort.dummy << endl;
// this gives 10 - OK//
mainClass.init(mainPort);
mainClass.changeDummy();
// this gives 20 - OK//
// reaching from the main again gives 10 - NOT OK
// what i expected to see is 20
cout << mainPort.dummy << endl;
}
我想我找不到正确的引用和指针组合 .
1 回答
您正在复制传入的structport,而不是存储对它的引用(并且,无论如何,指针在这里更合适) . 在你的
class1
定义中你有这一行:请注意,这不是引用或指针,它只是一个值,所以这意味着在执行此操作时在init中:
它将
prt
中当前的值复制到classPort
,然后在class1::changeDummy
中修改它时,它只更改mainClass
中的副本,而不是全局对象 .为了实现您的目标,您需要在 class1.h 中更改
class
的定义,如下所示:在 class1.cpp 文件中对
structPort*
进行了相应的更改,记住它从classPort.dummy = 20;
更改为classPort->dummy = 20;
. 然后在你的main.cpp
文件中:但是,您需要小心代码中的原始指针,并查看适合您未来工作的智能指针 .