【问题标题】:C++ Pass an object into another object?C ++将一个对象传递给另一个对象?
【发布时间】: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();
}

【问题讨论】:

  • 你能把整个代码贴出来吗:)
  • @KrysselTillada 这是 4 个文件,还有很多文本.. 你确定吗?
  • 注意MCVE中的M。
  • 链接页面的说明是不是不清楚?

标签: c++ class logic


【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多