在C ++中,我有:
//Base1.h
#ifndef BASE1_H
#define BASE1_H
#include <iostream>
#include <string>
#include "Base2.h"
using namespace std;
class Base1{
private:
string name;
public:
Base1(string _name);
void printSomething();
string getName();
};
#endif
在Base1.cpp
我正常实施构造函数Base1(string _name)
和string getName()
以及printSomething()
:
void Base1::printSomething(){
Base2 b2;
// how to pass a parameter in the following code?
b2.printBase1();
}
// This is Base2.h
#ifndef BASE2_H
#define BASE2_H
#include <iostream>
#include <string>
#include "Base1.h"
using namespace std;
class Base2{
public:
Base2();
void printBase1(Base1 b);
};
#endif
Base2()
构造函数我像往常一样实现,这是我的printBase1(Base1 b)
:
void Base2::printBase1(Base1 b){
cout << b.getName();
}
所以,最后,我想在printSomething()
类中使用Base1
,但我不知道如何将参数传递给b2.printBase1()
中的printSomething()
作为在我的代码中。在C ++中有什么类似b2.printBase1(this)
的东西吗?如果没有,你能给我一个建议吗?
答案 0 :(得分:3)
由于this
是C ++中的指针,因此需要取消引用它:
b2.printBase1(*this);
请注意,您有循环包含,应从#include "Base2.h"
删除Base1.h
。另请参阅通过(const
)引用传递参数,尤其是对于非POD类型,否则您可能无法获得预期的行为。
例如,您的签名是
void printBase1(Base1 b);
调用它时,可以在函数中创建参数的副本,从而对副本进行操作。您应该将其更改为:
void printBase1(Base1& b);
或
void printBase1(const Base1& b); //if you don't change b
只有当您确定需要副本时,才能按值传递。