C ++将一个对象传递给另一个对象?
Posted
技术标签:
【中文标题】C ++将一个对象传递给另一个对象?【英文标题】:C++ Pass an object into another object? 【发布时间】:2015-09-15 08:27:25 【问题描述】:我不知道我是否遗漏了什么,但我似乎无法弄清楚如何完成这项工作,也无法在网上找到答案。
假设我有两个类,A 类和 B 类。(存储在单独的文件中)
A 类有一个函数 setName(),它在 A 类对象中设置一个变量。
B 类有一个函数 setOtherName(),它设置 A 类对象名称的值。
所以我这样设置 setOtherName():
void setOtherName(ClassA& cla)
*cla.setName("foobar");
那么我的主脚本如下所示:
Class A burger;
Class B fries;
fries.setOtherName(*burger);
这在我的原始脚本中不起作用,我收到以下错误:
error: no matching function for call to 'ClassB::setOtherName(ClassA*&)
感谢任何帮助! (如有任何混淆,请见谅)
实际代码: main.cpp:
#include <iostream>
#include "quests.h"
#include "player.h"
#include <string>
#include <cstdlib>
using namespace std;
int main()
quests GameQuests;
player Player;
GameQuests.quest1(Player);
Player.main();
return 0;
quests.cpp:
#include "quests.h"
#include "player.h"
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
void quests::quest1(player& charact)
cout << "By the way, what was your name?" << endl;
person1=4;
system("pause");
charact->setName();
【问题讨论】:
***.com/help/mcve 你能把整个代码贴出来吗:) @KrysselTillada 这是 4 个文件,还有很多文本.. 你确定吗? 注意MCVE中的M。 链接页面的说明是不是不清楚? 【参考方案1】:setOtherName
函数的实现应该有签名
void ClassB::setOtherName(ClassA& cla)
您需要指定它包含在ClassB
中。在ClassB
的类定义中,确保包含
void setOtherName(ClassA&);
此外,由于您的变量 burger
是 ClassA
类型而不是 ClassA*
类型,因此在将变量传递给函数时无需取消引用。像这样称呼它
fries.setOtherName(burger);
您还错误地取消了变量cla
的引用。该对象是通过引用而不是指针传递的,因此无需取消引用。
【讨论】:
我的原始代码与示例不同,我将使用我的实际代码进行更新,看看是否有任何改变,因为这仍然不起作用:/【参考方案2】:您必须阅读有关指针和参考伙伴的信息。 你的函数应该是这样的
void setOtherName(ClassA& cla)
cla.setName("foobar");
没有必要尊重不是指针的东西。
ClassA burger;
ClassB fries;
fries.setOtherName(burger);
同样,您不需要取消对 burger 的引用,因为它不是指针。
如果汉堡是这样创建的:
ClassA* burger = new ClassA();
和功能
void setOtherName(ClassA& cla)
正在引用,您必须取消引用 burger
fries.setOtherName(*burger);
【讨论】:
【参考方案3】:你为什么要取消对汉堡的引用?您告诉编译器通过引用而不是指针期望 A 类。
试试:
fries.setOtherName(burger);
另外,去掉 setOtherName 上的星号。
void setOtherName(ClassA & cla)
cla.setName("foobar");
编辑: 在下面写了一个我认为你正在尝试做的示例程序。
#include <iostream>
#include <string>
class Burger
public:
Burger()
void setName(std::string name) m_name = name;
std::string getName() return m_name;
private:
std::string m_name;
;
class Fries
public:
Fries()
void setOtherName(Burger & burger) burger.setName("FryBurger");
private:
;
int main()
Burger A;
Fries B;
B.setOtherName(A);
std::cout << A.getName() << std::endl;
return 0;
【讨论】:
以上是关于C ++将一个对象传递给另一个对象?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Fire store ref 对象传递给另一个活动(Kotlin)?
Unity C# - 单击按钮将游戏对象传递给另一个 C# 脚本 [关闭]