我不知道我是否错过了什么,但我似乎无法弄清楚如何使这项工作,并且无法在线找到答案。
假设我有两个类,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();
}
答案 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);