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

时间:2015-06-29 00:15:33

标签: c++ class logic

我不知道我是否错过了什么,但我似乎无法弄清楚如何使这项工作,并且无法在线找到答案。

假设我有两个类,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);

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

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

3 个答案:

答案 0 :(得分:4)

setOtherName函数的实现应该有签名

void ClassB::setOtherName(ClassA& cla)

您需要指定它包含在ClassB中。在ClassB的班级定义中,请务必添加

void setOtherName(ClassA&);

此外,由于变量burger的类型为ClassA而类型为ClassA*,因此在将变量传递给函数时无需取消引用该变量。称之为

fries.setOtherName(burger);

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

答案 1 :(得分:2)

你为什么要退还汉堡?你告诉编译器通过引用而不是指针来期望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;
}

答案 2 :(得分:2)

您必须阅读有关指针和参考配合的信息。 这就是你的功能应该是什么样子

void setOtherName(ClassA& cla)
{
  cla.setName("foobar");
}

没有必要尊重不是指针的东西。

ClassA burger;
ClassB fries;
fries.setOtherName(burger);

再次,你不需要取消引用汉堡,因为它不是指针。

如果像这样创建汉堡:

ClassA* burger = new ClassA();

和功能

void setOtherName(ClassA& cla)

正在参考,你必须取消引用汉堡

fries.setOtherName(*burger);