C++ 将一个对象传递给另一个对象?

C++ Pass an object into another object?

我不知道我是否遗漏了什么,但我似乎无法弄清楚如何进行这项工作,也无法在网上找到答案。

假设我有两个 类、Class A 和 Class B。(存储在单独的文件中)

Class A 有一个函数 setName() 可以在 Class A 对象中设置一个变量。

Class B 有一个函数 setOtherName() 设置 Class 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();
}

你为什么取消对汉堡的引用?您告诉编译器期望 class 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;
}

您的 setOtherName 函数的实现应该具有签名

void ClassB::setOtherName(ClassA& cla)

您需要指定它包含在ClassB中。在 ClassB 的 class 定义中,确保包含

void setOtherName(ClassA&);

此外,由于您的变量 burgerClassA 类型而不是 ClassA* 类型,因此无需在将变量传递给函数时取消引用该变量。像这样称呼它

fries.setOtherName(burger);

您还错误地解除了对变量 cla 的引用。该对象是通过引用而不是指针传递的,因此无需取消引用。

您必须阅读有关指针和参考伙伴的内容。 这就是您的函数的样子

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