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&);

此外,由于您的变量 burgerClassA 类型而不是 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# 脚本 [关闭]

RxSwift:将实际可观察​​对象传递给另一个视图控制器?

如何将向量作为参数传递给另一个向量?

通过指针将堆栈分配的对象传递给在另一个线程上执行的函数

C ++将多个对象传递给线程中的函数