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

Sam*_*ubb 5 c++ logic class

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

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

A 类有一个函数setName(),它在 A 类对象中设置一个变量。

B 类有一个函数setOtherName()来设置 A 类对象名称的值。

所以我像这样设置setOtherName()

void setOtherName(ClassA& cla)
{
*cla.setName("foobar");
}
Run Code Online (Sandbox Code Playgroud)

然后我的主脚本看起来像这样:

Class A burger;
Class B fries;
fries.setOtherName(*burger);
Run Code Online (Sandbox Code Playgroud)

这在我的原始脚本中不起作用,我收到以下错误:

error: no matching function for call to 'ClassB::setOtherName(ClassA*&)
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!(抱歉有任何混淆)

实际代码: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;
}
Run Code Online (Sandbox Code Playgroud)

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();
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*iel 5

你的setOtherName函数的实现应该有签名

void ClassB::setOtherName(ClassA& cla)
Run Code Online (Sandbox Code Playgroud)

您需要指定它包含在ClassB. 在你的类定义中ClassB,确保包括

void setOtherName(ClassA&);
Run Code Online (Sandbox Code Playgroud)

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

fries.setOtherName(burger);
Run Code Online (Sandbox Code Playgroud)

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