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&);
此外,由于您的变量 burger
是 ClassA
类型而不是 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);
我不知道我是否遗漏了什么,但我似乎无法弄清楚如何进行这项工作,也无法在网上找到答案。
假设我有两个 类、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&);
此外,由于您的变量 burger
是 ClassA
类型而不是 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);