我正在C++中进行开发。我有两个对象:它们是StandaloneAgent和ConfigManager。我想从独立代理访问ConfigManager中的一个带有函数的char*变量。
int32_t StandaloneAgent::getConfigFile(char * file){
int32_t code = mConfigMgr->getConfigFile(file);
return code;
}
int32_t ConfigManager::getConfigFile(char * file){
file = mConfigFile;
return 0;
}
这里,ConfigManager对象集是具有ConfigManager * mConfigMgr;
变量。我想要访问的文件位于ConfigManager的mConfigFile属性中。
问题是:
在放入std::cout时,中的mConfigFile正常,并且之后的文件变量
file = mConfigFile;
正常吗
但是当我在独立代理的getConfigFile((函数中返回时,文件变量是一个空指针,我不知道为什么。
有没有我缺少的C++规范?
函数的参数要么通过值传递,要么通过引用。通过值传递给的任何变量都将是函数的本地变量,对其所做的任何更改也是函数的本地更改。这意味着,当为指针(file = mConfigFile
(分配新值时,只需更改函数中的指针。作为参数传递的指针不受影响。
通过引用获取参数时,函数内部的变量会引用用于调用函数的变量。对该变量所做的任何更改都将直接对函数调用中使用的变量进行。
在您的情况下,这意味着您需要更改ConfigManager::getConfigFile
函数:
int32_t ConfigManager::getConfigFile(char*& file){
file = mConfigFile; // the change is made to the variable used as an argument
return 0;
}
如果传递给StandaloneAgent::getConfigFile
的指针也应该更改(我认为是这样(,那么您需要进行相同的更改:
int32_t StandaloneAgent::getConfigFile(char*& file){
int32_t code = mConfigMgr->getConfigFile(file);
return code;
}